在 pandas.to_sql() 中使用“可调用”方法的示例?

我正在尝试创建一个具有ON CONFLICT参数的特定插入语句(我正在上传到 Postgres 数据库);df.to_sql(method='callable') 会允许吗?还是为了其他目的?我已经阅读了文档,但我无法掌握这个概念。我在这个网站和其他网站上四处寻找类似的问题,但我还没有找到。如果可能的话,我希望看到一个如何在实践中使用“可调用”方法的示例。关于如何使用逻辑有效地从 pandas 加载大量行的任何其他想法ON CONFLICT也将不胜感激。在此先感谢您的帮助!



炎炎设计
浏览 240回答 2
2回答

茅侃侃

这是一个关于如何使用 postgres 的ON CONFLICT DO NOTHING示例to_sql# import postgres specific insertfrom sqlalchemy.dialects.postgresql import insertdef to_sql_on_conflict_do_nothing(pd_table, conn, keys, data_iter):    # This is very similar to the default to_sql function in pandas    # Only the conn.execute line is changed    data = [dict(zip(keys, row)) for row in data_iter]    conn.execute(insert(pd_table.table).on_conflict_do_nothing(), data)conn = engine.connect()df.to_sql("some_table", conn, if_exists="append", index=False, method=to_sql_on_conflict_do_nothing)

哔哔one

我刚刚遇到了类似的问题,然后对于这个答案,我想出了如何发送df到的解决方案potgresSQL ON CONFLICT:1.发送一些初始数据到数据库创建表from sqlalchemy import create_engineengine = create_engine(connection_string)df.to_sql(table_name,engine)2.添加primary keyALTER TABLE table_name ADD COLUMN id SERIAL PRIMARY KEY;3. 在要检查唯一性的列(或列)上准备索引CREATE UNIQUE INDEX review_id ON test(review_id);4.映射sql表sqlalchemyfrom sqlalchemy.ext.automap import automap_baseABase = automap_base()Table = ABase.classes.table_nameTable.__tablename__ = 'table_name'6. 做你insert on conflict的:from sqlalchemy.dialects.postgresql import insertinsrt_vals = df.to_dict(orient='records')insrt_stmnt = insert(Table).values(insrt_vals)do_nothing_stmt  = insrt_stmnt.on_conflict_do_nothing(index_elements=['review_id'])results = engine.execute(do_nothing_stmt)
打开App,查看更多内容
随时随地看视频慕课网APP

相关分类

Python