我正在尝试建立一个包含一些特定字段的数据库(而且我不能脱离规范)。字段之一将是名为metadata
的列,但是sqlalchemy
可以防止这种情况:
sqlalchemy.exc.InvalidRequestError: Attribute name 'metadata' is reserved for the MetaData instance when using a declarative base class.
是否有一个不错的解决方法?我是否需要猴子补丁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()))
答案 0 :(得分:1)
你可以使用像:
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
name 字段可以在构建时省略,稍后应用
换句话说,您可以根据自己的喜好写一个名字。