【问题标题】:Insert batch in postgres from list of lists using python and sql alchemy使用 python 和 sql alchemy 从列表列表中插入批处理到 postgres
【发布时间】:2018-04-29 17:40:32
【问题描述】:

我有这个数据指的是一个表。我必须使用 sql alchemy 将它插入到表中。我想使用行列表在表中插入一批行(现在我有三行,但我将有大约 50.000 行),就像弹性搜索中的 bluk 但使用 postgres。你能给我任何想法或代码示例吗?在此先感谢您的帮助。

fields = ["NAME", "MACHINE", "PRE", "DATE", "COMP"]
rows = [
          ["ECO", "A07", 6, "2016-03-07", "Card"], 
          ["LIN", "A01", 1, "2016-03-07", "Reader"], 
          ["SUM", "A02", 2, "2016-03-07", "Scanner"]
        ]

【问题讨论】:

  • 你试过了吗?
  • 嗨,我逐行添加,但我没有找到任何方法可以批量添加
  • 我在使用 Amazon Redshift 和 psycopg 时遇到了同样的问题。我不了解 sql alchemy,但在我的情况下,我最终使用了两种方法:构建巨大的 sql 查询以一次插入所有行或使用 amazon redshift ssh 接口使用 csv 上传数据。

标签: python postgresql sqlalchemy


【解决方案1】:

您可以使用SQLAlchemy Core API,如果您传递字典列表,它会自动执行批量插入。

例子:

engine = sqlalchemy.create_engine(db_url, echo=True) # echo for testing
db = engine.connect()
meta = sqlalchemy.MetaData()
foo_table = sqlalchemy.Table('foo', meta, autoload=True, autoload_with=engine)
foo_ins = foo_table.insert()

# fields, rows - as assigned in the question
xs = [ { k: v for k, v in zip(fields, row) } for row in rows ]

db.execute(foo_ins, xs)

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2016-02-11
    • 1970-01-01
    • 2021-02-17
    • 2021-12-31
    • 2018-05-06
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多