【发布时间】:2020-09-13 03:21:13
【问题描述】:
我正在尝试将 pandas 数据帧数据批量插入 Postgresql。 在 Pandas 数据框中我有 35 列,在 Postgresql 表中我有 45 列。我从 pandas 数据框中选择 12 个匹配列并插入到 postgresql 表中。为此,我使用以下代码 sn-ps:
df = pd.read_excel(raw_file_path,sheet_name = 'Sheet1',usecols=col_names) <---col_names = list of desired columns (12 columns)
cols = ','.join(list(df.columns))
tuples = [tuple(x) for x in df.to_numpy()]
query = "INSERT INTO {0}.{1} ({2}) VALUES (%%s,%%s,%%s,%%s,%%s,%%s,%%s,%%s,%%s,%%s,%%s,%%s);".format(schema_name,table_name,cols)
curr = conn.cursor()
try:
curr.executemany(query,tuples)
conn.commit()
curr.close()
except (Exception, psycopg2.DatabaseError) as error:
print("Error: %s" % error)
conn.rollback()
curr.close()
return 1
finally:
if conn is not None:
conn.close()
print('Database connection closed.')
运行时出现此错误:
SyntaxError: syntax error at or near "%"
LINE 1: ...it,purchase_group,indenter_name,wbs_code) VALUES (%s,%s,%s,%...
即使我使用 ? 代替 %%s 我仍然收到此错误。
有人能解释一下吗?
附:我正在使用 Postgresql 版本 10。
【问题讨论】:
-
%s 将从 python 变量中获取字符串值。你想用那些 %s 的东西做什么?您已经使用 {0} 等将变量放入字符串中。您要传递 %s 还是在其中放置一些值?
-
@antont:我想将 %s 即行值作为元组传递到数据库中。目标是批量插入。或者即使我使用像
"INSERT INTO {0}.{1} ({2})".format(schema_name,table_name,cols) + "VALUES(?,?,...?)"这样的查询字符串,我也会遇到同样的错误。 -
如果你想要更多参数,可以把 {3} {4} 等放在一起,我认为最好不要在一行中混合两种语法
-
你为什么要加倍
%? -
@parafit:我在某处看到使用 %%s。因此使用。
标签: python postgresql