gpt4 book ai didi

Sqlalchemy + Firebird : How to remove quotation marks

转载 作者:行者123 更新时间:2023-12-04 10:32:03 25 4
gpt4 key购买 nike

我是 SqlAlchemy 和 Firebird DB 的新手。

我可以使用 DBeaver 直接创建表:

CREATE TABLE NEWTABLE (
COLUMN1 FLOAT,
COLUMN2 FLOAT
);

但是如果我尝试使用 pyndas+sqlalchemy 做同样的事情,我会收到一个错误:

import sqlalchemy as sa
import pandas as pd


engine = sa.create_engine(r'firebird+fdb://user:pwd@localhost:3050/c:\XXX.FDB', echo=False)
df = pd.DataFrame({"COLUMN1":[], "COLUMN2":[]})
df.to_sql(name="NEWTABLE", con=engine, if_exists = 'replace', index=False, method=None)
DatabaseError: (fdb.fbcore.DatabaseError) ('Error while preparing SQL statement:\n- SQLCODE: -817\n- Dynamic SQL Error\n- SQL error code = -817\n- Metadata update statement is not allowed by the current database SQL dialect 1', -817, 335544569)
[SQL:
CREATE TABLE "NEWTABLE" (
COLUMN1 FLOAT,
COLUMN2 FLOAT
)

问题是由于"..." 查询中的引号to_sql
  • 如何告诉 sqlalchemy 不使用引号以兼容 Firebird(方言 1)?

  • 作为备选:
  • 是否可以仅从 to_sql 生成查询字符串并稍后使用 result = engine.execute(query) 执行,而不是立即执行查询?这将提供在执行之前修复这些不兼容性的可能性。
  • 最佳答案

    我找到了一个可能的解决方案阅读 Get rid of double quotation marks with SQLalchemy for PostgreSQL :如果表名是大写,则自动用引号括起来 .

    实验上我发现同样适用于 Firebird ,即使我没有找到对此问题的任何适当引用,但只有 something apparently unrelated

    更改为

    df.to_sql(name="newtable", ...)

    解决了这个问题。

    关于Sqlalchemy + Firebird : How to remove quotation marks,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/60371803/

    25 4 0
    Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
    广告合作:1813099741@qq.com 6ren.com