在 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)
我正在尝试编写一个基本的 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)