目标是将excel列数据写入postgres表中,但是excel中的所有列名称均与表列不匹配。 因此,我正在尝试仅插入公共列。 我可以获取集中的通用数据。
我对如何在单个查询中插入数据感到困惑。
我正在使用熊猫数据框。
#Getting table columns in a list
conn = psycopg2.connect(dbname=dbname, host=host, port=port, user=user, password=pwd)
print("Connecting to Database")
cur = conn.cursor()
cur.execute("SELECT * FROM " + table_name + " LIMIT 0")
table_columns = [desc[0] for desc in cur.description]
#print table_columns
#Getting excel sheet columns in a list
df = pd.read_excel('/Users/.../plans.xlsx', sheet_name='plans')
engine = create_engine('postgresql://postgres:postgres@localhost:5432/test_db')
column_list = df.columns.values.tolist()
#print(column_list)
s = set(column_list).intersection(set(table_columns))
for x in df['column_1'] :
sql = "insert into test_table(column_1) values ('" + x + "')"
cur.execute(sql)
cur.execute("commit;")
conn.close()
根据答案更新代码,但是每次我运行程序时,它都会插入新记录。有什么我可以做的选择吗?
s = set(column_list).intersection(set(table_columns))
df1 = df[df.columns.intersection(table_columns)]
#print df1
df1.to_sql('medical_plans', con=engine, if_exists='append', index=False, index_label=None)
答案 0 :(得分:0)
您可以将集合中的所有值连接成一个字符串,并将其传递给查询:
df = {'column_1':[1,2,3,4,5,6,7]}
all_vals = ','.join(map(str,df['column_1']))
然后可以使用以下内容创建查询字符串:
sql = "insert into test_table(column_1) values ('{vals}')".format(vals=all_vals)