小编Ale*_*nsk的帖子

SQLAlchemy PostgreSQL UPSERT 值数组引发 UnsupportedCompilationError

尝试对 PostgreSQL > 9.5 的值数组执行 UPSERT。

尝试像SQLALchemy文档中那样构建语句,但没有解释如何为数组而不是单行执行此操作。insert 语句构建正确,所以我想可以使用 on_conflict_do_update 函数来做到这一点。

有这个代码:

stock_table = Table("stock_history", metadata,
            Column('date', sqlalchemy.types.NVARCHAR(length=255), primary_key=True),
            Column('product_id', sqlalchemy.types.INTEGER(), primary_key=True),
            Column('product_sku', sqlalchemy.types.NVARCHAR(length=255)), 
            Column('on_hand_qty',  sqlalchemy.dialects.postgresql.DOUBLE_PRECISION()),
            Column('available_qty',  sqlalchemy.dialects.postgresql.DOUBLE_PRECISION()),
            Column('output_qty', sqlalchemy.dialects.postgresql.DOUBLE_PRECISION())
        )
stock_today = pandas.read_sql_query(queryStock, odoo_engine)
insert_stmt = sqlalchemy.dialects.postgresql.insert(stock_table).values(stock_today)
upser_stmt = insert_stmt.on_conflict_do_update(
            index_elements=['date', 'product_id'],
            set_=stock_today.to_dict(orient='dict')
        )
Run Code Online (Sandbox Code Playgroud)

我收到以下错误:

AttributeError: 'StrSQLCompiler' 对象没有属性 'visit_on_conflict_do_update'

During handling of the above exception, another exception occurred:

    Traceback (most recent call last):
      File "pompeiiETL.py", line 15, in <module>
        pompeiiJobs.runStockJob(dwh_engine, odoo_prod_engine)
      File "/Users/alex/Development/DataLab/pompeii-datalab/pompeiiETL/jobs.py", line 54, in runStockJob
        print(upser_stmt) …
Run Code Online (Sandbox Code Playgroud)

python postgresql sqlalchemy

3
推荐指数
1
解决办法
2553
查看次数

标签 统计

postgresql ×1

python ×1

sqlalchemy ×1