在 SQLAlchemy 代码执行期间删除 table 名称中的双引号 (Teradata)

Remove double quotes in table name during SQLAlchemy code execution (Teradata)

我正在尝试编写一个基本的 ORM SQLAlchemy class 来访问 Teradata table。但是,当 SQLAlchemy 创建并执行 SQL 代码时,它将我的 table 名称放在双引号中,这会阻止 Teradata 将 table 识别为有效的 table 名称(它期望 table 名称不带引号)。无论如何要删除 SQLalchemy 正在执行的引号?

例如:

class d_game_info(Base):
    __tablename__ = 'dbo.d_game_info'
    game_id = Column(Integer, primary_key = True)
    game_name = Column()

Session = sessionmaker(bind=td_engine)
session = Session()

for instance in session.query(d_game_info).order_by(d_game_info.game_id):
    print(instance.game_name)

错误结果:

"Object 'dbo.d_game_info' does not exist."

因为 SQLAlchemy 尝试执行的代码是

... FROM "dbo.d_game_info" ...

而不是

... FROM dbo.d_game_info ...

所以...有没有办法强制它执行不带双引号的代码?

谢谢!

dbo 不是 table 名字的一部分;它是 table 的架构名称。 SQLAlchemy中指定schema的方式是这样的:

class d_game_info(Base):
    __table_args__ = {'schema' : 'dbo'}

您可以使用 quote parameter

class d_game_info(Base):
    __tablename__ = 'dbo.d_game_info'
    __table_args__ = {'quote': False}
    game_id = Column(Integer, primary_key = True)
    game_name = Column()

quote 参数也可以与 Column() 一起使用,以防将列名放在引号中。

game_name = Column('GAME_NAME', String(50), quote=False)