Используйте ключевое слово 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 атрибуты любым способом, который вы хотите.

Другие вопросы по тегам