小编cte*_*giz的帖子

如何使用反射和描述性语法覆盖sqlalchemy中的列名

您好我正在尝试使用sqlalchemy将遗留应用程序移植到python.

应用程序的现有数据库有大约300个表,每个表中都有一个名为def的列,如:

create table accnt (
    code varchar(20)
  , def varchar(50) --for accnt definition
  , ...
)
Run Code Online (Sandbox Code Playgroud)

因此,当使用声明性语法和反射时,我可以轻松地创建我的类:

class Accnt(Base):
    __table__ = Table('accnt', metadata, autoload = True, autoload_with=engine)
Run Code Online (Sandbox Code Playgroud)

但是当我试图达到def列时,我最终得到一个错误.例如 :

q = session.query(Accnt)
for row in q:
    print q.def
Run Code Online (Sandbox Code Playgroud)

因为def是python的保留字:(

要克服这个问题,我可以创建我的课程:

class Accnt(Base):
    __table__ = Table('accnt', metadata, autoload = True, autoload_with=engine)
    __mapper_args__ = {'column_prefix':'_'}
Run Code Online (Sandbox Code Playgroud)

但是在每个列名前放一个_是无聊的,而不是花哨的.

我想要做的是访问def列与另一个名称/(键?).

有任何想法吗?

---编辑---(根据TokenMacGuy的要求编辑原帖)

虽然我已经接受了TokenMacGuy的回答,但我之前尝试过:

engine = create_engine('firebird://sysdba:masterkey@127.0.0.1/d:\\prj\\db2\\makki.fdb?charse??t=WIN1254', echo=False) 
metadata = MetaData() 
DbSession = sessionmaker(bind=engine) 
Base = declarative_base() …
Run Code Online (Sandbox Code Playgroud)

python sqlalchemy

10
推荐指数
1
解决办法
9944
查看次数

标签 统计

python ×1

sqlalchemy ×1