我试图编写一个基本的ORM SQLAlchemy类来访问Teradata表。但是,当SQLAlchemy创建并执行SQL代码时,它会将我的表名放在双引号中,这会阻止Teradata将表识别为有效的表名(它希望表名没有引号)。反正有没有删除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)
导致错误:
"对象' dbo.d_game_info'不存在。"
因为SQLAlchemy尝试执行的代码是
... FROM "dbo.d_game_info" ...
而不是
... FROM dbo.d_game_info ...
那么......有没有办法强制它在没有双引号的情况下执行代码?
谢谢!
答案 0 :(得分:0)
dbo
不是表格名称的一部分;它是表的模式名称。在SQLAlchemy中指定模式的方法如下:
class d_game_info(Base):
__table_args__ = {'schema' : 'dbo'}
答案 1 :(得分:0)
您可以使用 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)