我正在尝试建立一个包含几个特定字段的数据库(而且我不能偏离规范)。其中一个字段是名为 metadata
的列,但是 sqlalchemy
阻止了这一点:
sqlalchemy.exc.InvalidRequestError: Attribute name 'metadata' is reserved for the MetaData instance when using a declarative base class.
是否有合适的解决方法?我是否需要对 declarative_base
函数进行 monkeypatch 以重命名 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()))
最佳答案
你可以像这样使用:
class Data(DBBase):
id = Column(Integer, primary_key=True)
# metadata = Column(Integer)
metadata_ = Column("metadata", Integer)
Column
类的构造函数有一个name
参数。你可以从https://docs.sqlalchemy.org/en/13/core/metadata.html#sqlalchemy.schema.Column找到它
The name field may be omitted at construction time and applied later
也就是说,你本来可以随便写一个名字。
关于python - 是否可以重命名 SQLAlchemy 声明性基础的元数据属性?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/55461914/