Я пытаюсь настроить базу данных с несколькими конкретными полями (и я не могу отойти от спецификации). Одним из полей будет столбец с именем metadata
, но sqlalchemy
предотвращает это:
sqlalchemy.exc.InvalidRequestError: Attribute name 'metadata' is reserved for the MetaData instance when using a declarative base class.
Есть ли достойный обходной путь для этого? Нужно ли мне monkeypatch для функции declarative_base
, чтобы переименовать атрибут metadata
? Я не смог найти опцию переименовать этот атрибут в api docs .
Вот пример кода, который завершится с ошибкой выше:
#!/usr/bin/env python3.7
from sqlalchemy.ext.declarative import declarative_base, declared_attr
from sqlalchemy import Column, Integer
class CustomBase(object):
@declared_attr
def __tablename__(cls):
return cls.__name__.lower()
DBBase = declarative_base(cls=CustomBase)
class Data(DBBase):
id = Column(Integer, primary_key=True)
metadata = Column(Integer)
if __name__ == "__main__":
print(dir(Data()))