我正在尝试构建一个通过从Excel文件中获取数据来生成SQL查询的应用。我正在尝试通过Pandas实现这一目标,但是问题是,我只得到了一行回报,但是在Excel中却有超过一行。
代码:
from pandas import *
df1=pandas.read_excel("supermarkets.xlsx")
#SOURCE=df1
#ARGET="Aditya"
def SQL_DATAFRAME(SOURCE, TARGET):
sql_texts = []
for index, row in SOURCE.iterrows():
sql_texts = 'INSERT INTO '+TARGET+' ('+ str(', '.join(SOURCE.columns))+ ') VALUES '+ str(tuple(row.values))
return(''.join(sql_texts)+(";"))
print(SQL_DATAFRAME(df1,"Aditya"))
结果:
INSERT INTO Aditya (ID, Address, City, State, Country, Supermarket Name, Number of Employees) VALUES (1, '3666 21st St', 'San Francisco', 'CA 94114', 'USA', 'Madeira', 8);
答案 0 :(得分:0)
这仅仅是您的for循环的问题。 尝试以下操作:
sql_texts = []
for index, row in SOURCE.iterrows():
sql_texts. append('INSERT INTO '+TARGET+' ('+ str(', '.join(SOURCE.columns))+ ') VALUES '+ str(tuple(row.values)))
return(''.join(sql_texts)+(";"))
这样,您将在每次迭代中将查询字符串追加到sql_texts列表中。退出循环时,将返回联接的查询字符串。
话虽这么说,pandas.to_sql不会成功吗?
from sqlalchemy import create_engine
engine = create_engine('mydatabaseconnectiondetails')
SOURCE.to_sql(TARGET, engine, if_exists = 'append', index= False)
只需进行一些配置即可在您的情况下正常工作-而且性能会更高。
答案 1 :(得分:0)
您必须从return
语句中取出for块:
from pandas import *
df1=pandas.read_excel("supermarkets.xlsx")
#SOURCE=df1
#ARGET="Aditya"
def SQL_DATAFRAME(SOURCE, TARGET):
sql_texts = []
for index, row in SOURCE.iterrows():
sql_texts = 'INSERT INTO '+TARGET+' ('+ str(', '.join(SOURCE.columns))+ ') VALUES '+ str(tuple(row.values))
return(''.join(sql_texts)+(";"))
print(SQL_DATAFRAME(df1,"Aditya"))