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

时间:2016-08-12 19:39:23

标签: python sql sqlalchemy teradata

我试图编写一个基本的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 ...

那么......有没有办法强制它在没有双引号的情况下执行代码?

谢谢!

2 个答案:

答案 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)