非常感谢,对psycopg2比较陌生。
我试图以pandas数据框的形式批量插入数据到我现有的postgres数据库。
try:
psycopg2.extras.execute_values(
cur=cur,
sql=sql.SQL("""
INSERT into {table_name} ( {columns} )
VALUES %s
""").format(table_name=Identifier(entity),
columns=SQL(', ').join(map(Identifier, column_names))
),
argslist=dataframe,
template=None,
page_size=500)
except Exception as error:
print(ERROR: ' + error)
当我运行这个时,我得到了下面的错误。
string index out of range
我试着把数据框改成dict,使用..:
dataframe = dataframe.to_dict(orient='records')
我从except子句得到的输出结果如下。
'dict' object does not support indexing
任何帮助都非常感激,我不知道这里的问题是什么。
先谢谢你
这似乎是一个无益的错误信息的案例。引用另一篇文章的内容 所以回答:
你必须给
%%
以此作为%
因为%
在python中被用作字符串格式化,所以当你写单个的%
其假设你要用这个来代替一些值。所以,当你想把单个
%
在有疑问的字符串中,总是放置双倍%
.
试试下面的代码,它取代了 %s
与 %%s
.
try:
psycopg2.extras.execute_values(
cur=cur,
sql=sql.SQL("""
INSERT into {table_name} ( {columns} )
VALUES %%s
""").format(table_name=Identifier(entity),
columns=SQL(', ').join(map(Identifier, column_names))
),
argslist=dataframe,
template=None,
page_size=500)
except Exception as error:
print(ERROR: ' + error)
或者,你也可以使用 pandas.to_sql:
from sqlalchemy import create_engine
engine = create_engine('"postgresql://postgres:postgres@localhost/postgres"', echo=False)
df.to_sql('table_name', con=engine, if_exists='append')
在制作之前先玩玩这个... ...