Используйте ключевое слово python в качестве поля модели в peewee
Я строю ORM для существующей базы данных с peewee в python3.
Теперь я сталкиваюсь с проблемой в одной таблице, что есть столбец с именем import
, который я должен представить как атрибут класса. Это, конечно, не так просто, потому что это ключевое слово в языке Python. Есть ли способ изменить имя поля по-другому? Я не могу изменить имя столбца, так как это приведет к серьезным побочным эффектам в других системах.
2 ответа
Использовать db_column
атрибут:
class MyModel(Model):
import_ = CharField(db_column='import')
Вы можете создать атрибут класса с именем 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
, Так что вы можете использовать import_
в вашем коде Python, и import
Атрибут будет синхронизирован автоматически.
В качестве альтернативы вы можете просто использовать метакласс, который определяет пользовательский __getattr__
это будет обрабатывать import
атрибуты любым способом, который вы хотите.