Python 将批量数据从df插入postgresql时出现语法错误
我正在尝试将数据帧数据大容量插入Postgresql在熊猫数据框架中我有35列,在Postgresql表中我有45列。我正在从pandas dataframe中选择12个匹配列并插入到postgresql表中。为此,我使用以下代码段:Python 将批量数据从df插入postgresql时出现语法错误,python,postgresql,Python,Postgresql,我正在尝试将数据帧数据大容量插入Postgresql在熊猫数据框架中我有35列,在Postgresql表中我有45列。我正在从pandas dataframe中选择12个匹配列并插入到postgresql表中。为此,我使用以下代码段: df = pd.read_excel(raw_file_path,sheet_name = 'Sheet1',usecols=col_names) <---col_names = list of desired columns (12 columns) co
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.')
即使我使用?
代替%%s
我仍然会收到此错误
有人能解释一下吗
另外,我正在使用Postgresql版本10。您现在所做的实际上是一次插入一行数据帧。即使这样做有效,这将是一个极其缓慢的操作。同时,如果数据可能包含字符串,只需将它们放入这样的查询字符串中,就可以进行SQL注入 我不会重新发明轮子。Pandas有一个函数,用于获取数据帧并将其转换为查询。您可以指定如何处理冲突(当行已存在时) 它与,它对PostgreSQL有极好的支持。即使它可能是一个需要探索和安装的新软件包,您也不需要在其他任何地方使用它来实现这一点
从sqlalchemy导入创建引擎
引擎=创建引擎('postgresql://localhost:5432/mydatabase')
pd.read_excel(
原始文件路径,
图纸名称='Sheet1',
usecols=col_names#%s将从python变量中获取字符串值。您想对这些%s做什么?您已经将变量与{0}一起放入字符串中等等。你想传递%s还是在那里放一些值?@Anton:我想传递%s,即行值作为元组到数据库中。目标是批量插入。或者即使我使用查询字符串,如“insert into{0}.{1}({2})”。格式(模式名,表名,cols)+“values(?,,…)”
,我也会得到同样的错误。很好地放{3}{4} 等如果你想要更多的参数,我认为最好不要在一行上混合两个语法为什么要将%
加倍?@parafit:我看到某处使用%%s。因此使用。这很好。但是,我正在寻找更传统和通用的方法。你能解释一下“传统”是什么意思吗?我认为这和它得到的一样通用。实际插入发生在哪里?在函数内部,它由pandas处理。请参阅我链接的文档中的示例:他们调用函数,然后选择,并查看结果已插入Hanks Ruben!这很有效。有点奇怪。使用时如何关闭连接创建引擎
?
SyntaxError: syntax error at or near "%"
LINE 1: ...it,purchase_group,indenter_name,wbs_code) VALUES (%s,%s,%s,%...