在peewee中使用Python关键字作为模型字段

3 投票
2 回答
647 浏览
提问于 2025-04-18 13:40

我正在用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

你可以使用一个自定义的元类来隐藏对 getattrsetattr 的访问,并添加一个叫 @property 的装饰器,命名为 import_,这样就可以修改 import 的值。这样你在 Python 代码中就可以使用 import_,而 import 属性会自动同步。

另外,你也可以简单地使用一个元类,定义一个自定义的 __getattr__ 方法,这样就可以按照你想要的方式处理 import 属性。

5

使用 db_column 属性:

class MyModel(Model):
    import_ = CharField(db_column='import')

撰写回答