我正在尝试用几个特定的字段建立一个数据库(我不能离开规范)。其中一个字段将是一个名为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()))
型
2条答案
按热度按时间tf7tbtn21#
你可以使用像:
字符串
Column
类的构造函数有一个name
参数。您可以从www.example.com找到它https://docs.sqlalchemy.org/en/13/core/metadata.html#sqlalchemy.schema.Columnname字段可能在构造时被省略,以后再应用
换句话说,你可以写一个你想要的名字。
toe950272#
我知道这是一个老问题,但我最近遇到了同样的问题,并设法找到了解决方案。
对于SQLAlchemy 2.0+,您可以在模型声明之后立即声明列:
字符串
**文档:**https:docs.sqlalchemy.org/en/20/orm/declarative_tables.html#appending-additional-columns-to-an-existing-declarative-mapped-class