Nic*_*eet 8 python postgresql sqlalchemy
我正在尝试建立一个包含一些特定字段的数据库(并且我无法摆脱规范)。其中一个字段是名为 的列metadata,但sqlalchemy会阻止这种情况:
sqlalchemy.exc.InvalidRequestError: Attribute name 'metadata' is reserved for the MetaData instance when using a declarative base class.
Run Code Online (Sandbox Code Playgroud)
有一个合适的解决方法吗?我是否需要对declarative_base函数进行 Monkeypatch 来重命名metadata属性?我在api 文档中找不到重命名该属性的选项。
以下是一些因上述错误而失败的示例代码:
#!/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()))
Run Code Online (Sandbox Code Playgroud)
你可以这样使用:
class Data(DBBase):
id = Column(Integer, primary_key=True)
# metadata = Column(Integer)
metadata_ = Column("metadata", Integer)
Run Code Online (Sandbox Code Playgroud)
类的构造函数Column有一个name参数。您可以从https://docs.sqlalchemy.org/en/13/core/metadata.html#sqlalchemy.schema.Column找到它
名称字段可以在构造时省略并在以后应用
换句话说,你本来可以写一个你想要的名字。
| 归档时间: |
|
| 查看次数: |
2710 次 |
| 最近记录: |