您好我正在尝试使用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)