我已经从网络资源中抓取了一些数据并将其全部存储在pandas
DataFrame中。现在,为了利用SQLAlchemy提供的强大的db工具,我想将所说的DataFrame转换为Table()对象,并最终将所有数据上载到PostgreSQL表中。如果可行,那么完成此任务的可行方法是什么?
如果您使用的是PostgreSQL 9.5或更高版本,则可以使用临时表和一条INSERT ... ON CONFLICT
语句执行UPSERT :
with engine.begin() as conn:
# step 0.0 - create test environment
conn.execute(sa.text("DROP TABLE IF EXISTS main_table"))
conn.execute(
sa.text(
"CREATE TABLE main_table (id int primary key, txt varchar(50))"
)
)
conn.execute(
sa.text(
"INSERT INTO main_table (id, txt) VALUES (1, 'row 1 old text')"
)
)
# step 0.1 - create DataFrame to UPSERT
df = pd.DataFrame(
[(2, "new row 2 text"), (1, "row 1 new text")], columns=["id", "txt"]
)
# step 1 - create temporary table and upload DataFrame
conn.execute(
sa.text(
"CREATE TEMPORARY TABLE temp_table (id int primary key, txt varchar(50))"
)
)
df.to_sql("temp_table", conn, index=False, if_exists="append")
# step 2 - merge temp_table into main_table
conn.execute(
sa.text("""\
INSERT INTO main_table (id, txt)
SELECT id, txt FROM temp_table
ON CONFLICT (id) DO
UPDATE SET txt = EXCLUDED.txt
"""
)
)
# step 3 - confirm results
result = conn.execute(sa.text("SELECT * FROM main_table ORDER BY id")).fetchall()
print(result) # [(1, 'row 1 new text'), (2, 'new row 2 text')]
我正在尝试将log4j升级到log4j2。我试图升级的特定代码行是: 静态字段在新的中不再可用。相反,似乎使用了静态方法来访问优先级int值,可以将指定为。 但是,此方法还需要指定。在调用时,如何知道要指定哪个? 旧优先级:https://logging.apache.org/log4j/1.2/apidocs/org/apache/log4j/priority.html 新优先级:https:/
是否可以在PostgreSQL中执行多值upsert?我知道存在多值插入,“ON CONFLICT”关键字在违反密钥时执行更新……但有可能将两者结合起来吗?大概是这样。。。 我用谷歌搜索了这个面包屑,找不到任何关于它的东西。 我有一个应用程序正在利用pg-promise,我正在做批处理。它可以工作,但它的速度非常慢(比如每5秒左右就有50行......)。我想,如果我能取消批处理,而是正确地构建这
我刚刚将mac OS X更新到Yosemite10.10.4版本,并将postgresql更新到:psql(postgresql)9.4.4。
最近对OSX Mavericks的升级中断了我的Rails应用程序的数据库连接。 当我尝试从数据库中提取时,服务器返回以下错误: 当尝试运行时,我得到: 我已经尝试了许多在互联网上可用的解决方案。例如重新安装pg gem并在my database.yml中设置host:localhost。我的/usr/local/var/postgres/pg_hba.conf文件显示: 返回哪个psql: 这件
问题内容: 我想将我的pandas DataFrame插入到SQL Server表中。这个问题为PostgreSQL提供了一个可行的解决方案,但T- SQL没有的变体。如何为SQL Server完成同一件事? 问题答案: 有两种选择: 使用语句代替。 使用带a的语句,后跟条件语句。 MERGE的T-SQL文档说: 性能提示:当两个表具有匹配特征的复杂混合时,为MERGE语句描述的条件行为最有效。例
升级准备工作: pika在2.3.3版本时为了确保同步的可靠性,增加了server-id验证功能,因此pika2.3.3~pika2.3.6与pika2.3.3之前的版本无法互相同步 如果你的pika版本<2.3.3, 你需要准备pika2.3.6及pika3.0.16的bin文件,这里需要注意的是3.0.x需要准备3.0.16以后的版本(或者3.0.6版本),其他版本pika不再能与低版本(2.