Skip to content

Commit adeb02d

Browse files
committed
use gemini + read from file and write to file
1 parent cfa3623 commit adeb02d

File tree

4 files changed

+70
-28
lines changed

4 files changed

+70
-28
lines changed

generateInserts.py

Lines changed: 37 additions & 25 deletions
Original file line numberDiff line numberDiff line change
@@ -1,9 +1,17 @@
11
import re
2-
import requests
32
import logging
3+
from dotenv import load_dotenv
4+
import os
5+
import google.generativeai as genai
6+
7+
load_dotenv()
8+
49

510
logging.basicConfig(level=logging.NOTSET)
611

12+
genai.configure(api_key=os.environ['GEMINI_API_KEY'])
13+
model = genai.GenerativeModel('gemini-pro')
14+
715

816
def extract_table_columns(sql_content):
917
create_table_pattern = re.compile(
@@ -50,7 +58,15 @@ def generate_insert_statements(table_columns):
5058
f"INSERT INTO {table_name} ({', '.join(columns)}) VALUES ({values_placeholder});")
5159

5260

53-
def generate_insert_statement_from_ai(sql_content):
61+
def extract_inserts(response):
62+
sql_pattern = re.compile(r'```sql(.*?)```', re.DOTALL)
63+
sql_matches = sql_pattern.findall(response)
64+
return sql_matches
65+
66+
67+
def generate_insert_statement_from_ai(sql_content: str):
68+
if not sql_content.lower().startswith('create table'):
69+
return
5470
logging.info(f"Generating INSERT Statements for table {sql_content}")
5571
prompt = (
5672
f"Generate me random fake data for the following tables:"
@@ -61,10 +77,25 @@ def generate_insert_statement_from_ai(sql_content):
6177
f"Values (...)"
6278
f"(...)"
6379
f"Make 10 statements"
80+
f"Note that bigserial is a number. Each row table has an id."
6481
)
65-
res = requests.get(f"https://api.freegpt4.ddns.net/?text={prompt}")
66-
print(res)
67-
print(res.text)
82+
83+
response = model.generate_content(prompt)
84+
sql_inserts = ""
85+
try:
86+
sql_inserts = extract_inserts(response.text)
87+
except:
88+
print("EXCEPTTTT.....")
89+
print(response)
90+
sql_inserts = extract_inserts(
91+
response.candidates[0].content.parts)
92+
93+
# Write the extracted SQL statements to a file
94+
output_file_path = 'extracted_sql_statements.sql'
95+
with open(output_file_path, 'a') as output_file:
96+
for sql_statement in sql_inserts:
97+
output_file.write(sql_statement.strip())
98+
6899
return ''
69100

70101

@@ -73,23 +104,4 @@ def generate_insert_statement_from_ai(sql_content):
73104
sql_content = []
74105
with open(file_path, 'r') as sql_file:
75106
for line in sql_file:
76-
sql_content.append(line)
77-
print(sql_content)
78-
79-
insert_statement = generate_insert_statement_from_ai(sql_content)
80-
81-
# sql_content = """
82-
# create table "address" (
83-
# "customer_id" bigint,
84-
# "id" bigint not null,
85-
# "address_line" varchar(255),
86-
# "city" varchar(255),
87-
# "coordinates" varchar(255),
88-
# "country" varchar(255),
89-
# "postal_code" varchar(255),
90-
# "street_number" varchar(255),
91-
# "unit_number" varchar(255),
92-
# primary key ("id"),
93-
# foreign key ("customer_id") references "customer"
94-
# );
95-
# """
107+
generate_insert_statement_from_ai(line)

my-schema.sql

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1,3 +1,4 @@
1+
create table "product" ("price" float(53) not null, "category_id" bigint, "id" bigserial not null, "menu_id" bigint, "description" varchar(255), "name" varchar(255), primary key ("id"));
12
create table "address" ("id" bigint not null, "address_line" varchar(255), "city" varchar(255), "coordinates" varchar(255), "country" varchar(255), "postal_code" varchar(255), "street_number" varchar(255), "unit_number" varchar(255), primary key ("id"));
23
create table "billing_info" ("id" bigserial not null, "order_id" bigint unique, "credit_card_number" varchar(255), primary key ("id"));
34
create table "customer" ("user_id" bigint not null, primary key ("user_id"));
@@ -8,7 +9,6 @@ create table "menu" ("category_id" bigint, "id" bigserial not null, "restaurant_
89
create table "order" ("customer_id" bigint, "delivery_id" bigint unique, "id" bigserial not null, "order_date" timestamp(6), "restaurant_id" bigint, "order_status" varchar(255), primary key ("id"));
910
create table "order_item" ("quantity" integer not null, "id" bigserial not null, "order_id" bigint, "product_id" bigint, primary key ("id"));
1011
create table "payment_transaction" ("amount" numeric(38,2), "id" bigserial not null, "order_id" bigint unique, "payment_gateway" varchar(255), primary key ("id"));
11-
create table "product" ("price" float(53) not null, "category_id" bigint, "id" bigserial not null, "menu_id" bigint, "description" varchar(255), "name" varchar(255), primary key ("id"));
1212
create table "product_category" ("id" bigserial not null, "name" varchar(255), primary key ("id"));
1313
create table "product_image" ("id" bigserial not null, "product_id" bigint, "image_url" varchar(255), primary key ("id"));
1414
create table "restaurant" ("address_id" bigint unique, "id" bigint not null, "name" varchar(255), "operating_hours" varchar(255), "phone_number" varchar(255), primary key ("id"));

requirements.txt

Lines changed: 20 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1,2 +1,21 @@
1+
cachetools==5.3.2
2+
certifi==2023.11.17
3+
charset-normalizer==3.3.2
4+
google-ai-generativelanguage==0.4.0
5+
google-api-core==2.15.0
6+
google-auth==2.26.2
7+
google-generativeai==0.3.2
8+
googleapis-common-protos==1.62.0
9+
grpcio==1.60.0
10+
grpcio-status==1.60.0
11+
idna==3.6
12+
proto-plus==1.23.0
13+
protobuf==4.25.2
14+
pyasn1==0.5.1
15+
pyasn1-modules==0.3.0
16+
python-dotenv==1.0.0
117
requests==2.31.0
2-
urllib3==1.26.18
18+
rsa==4.9
19+
tqdm==4.66.1
20+
typing_extensions==4.9.0
21+
urllib3==2.1.0

roadmap

Lines changed: 12 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1,7 +1,18 @@
1+
Dec 28
12
Read from .sql file
23
Iterate through rows
34
Validate constraints
45
Useful logging with extract columns
56
Try other models - llama
67
Make it parallel with threads
7-
How to deal better with FKs
8+
How to deal better with FKs
9+
10+
Jan 12
11+
Some rows don't have ids
12+
13+
- Make it parallel with threads
14+
How to deal better with FKs
15+
16+
* less important
17+
Validate constraints
18+
Useful logging with extract columns

0 commit comments

Comments
 (0)