【问题标题】:ignoring unconsumed columns while inserting into postgres database using sqlalchemy使用 sqlalchemy 插入 postgres 数据库时忽略未使用的列
【发布时间】:2021-05-17 10:18:33
【问题描述】:

我想从 python 字典中将数据插入到表中。但是我的字典包含的键比表中的列多。所以我在插入时收到错误sqlalchemy.exc.CompileError: Unconsumed column names: column_name。我只想插入表中存在的列名并忽略多余的列。

如何使用 sqlalchemy 做到这一点?

我使用的代码是

from sqlalchemy import *
from sqlalchemy.dialects import postgresql

db = create_engine('postgresql+psycopg2://localhost:5432/postgres')
meta = MetaData()
meta.bind = db

data = [{
    'a': 1,
    'b': 2,
    'c': 3,
    'd': 4,
    'e': 5,
    'f': 6
}]

ins_stmt = postgresql.insert(table_object).values(data)
db.execute(ins_stmt)

我的table_object 包含列 a、b、c、d、e。

P.S.- 我使用的是 sqlalchemy 1.4

【问题讨论】:

    标签: python postgresql sqlalchemy


    【解决方案1】:

    我不知道有什么方法可以让insert 丢弃多余的项目,因此必须事先过滤掉它们。您可以通过将表的列名与字典的键进行比较来做到这一点。

    column_names = {c.name for c in table_object.columns}
    fixed = [{k: v for k, v in d.items() if k in (d.keys() & column_names)} for d in data]
    
    ins_stmt = postgresql.insert(table_object).values(fixed)
    with engine.connect() as conn:
        with conn.begin():
            conn.execute(ins_stmt)
    
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2011-01-14
      • 2021-10-18
      • 1970-01-01
      • 1970-01-01
      • 2021-04-23
      • 2020-11-07
      • 2012-06-13
      相关资源
      最近更新 更多