在peewee中使用Python关键字作为模型字段
我正在用Python3的peewee库为一个已有的数据库构建一个ORM。
现在我遇到了一个问题,在一个表里,有一列叫做import
,我必须把它作为类的属性引入。但是,这个名字在Python语言中是个关键字,所以直接用是不行的。有没有其他方法可以改变这个字段的名字呢?我不能改列的名字,因为那样会对其他系统造成很大的影响。
2 个回答
1
你可以创建一个名为 import
的类属性。不过,这样做的缺点是你每次都得通过程序来访问它。
In [1]: class Test(object):
...: locals()['import'] = 1
...:
In [2]: getattr(Test, 'import')
Out[2]: 1
In [3]: setattr(Test, 'import', 2)
In [4]: getattr(Test, 'import')
Out[4]: 2
你可以使用一个自定义的元类来隐藏对 getattr
和 setattr
的访问,并添加一个叫 @property
的装饰器,命名为 import_
,这样就可以修改 import
的值。这样你在 Python 代码中就可以使用 import_
,而 import
属性会自动同步。
另外,你也可以简单地使用一个元类,定义一个自定义的 __getattr__
方法,这样就可以按照你想要的方式处理 import
属性。
5
使用 db_column
属性:
class MyModel(Model):
import_ = CharField(db_column='import')