示例程序:
from sqlalchemy import Column, String, Table, select
from sqlalchemy.ext.declarative import declarative_base
Base = declarative_base()
class Dog(Base):
__tablename__ = "kennel"
name = Column(String, primary_key=True)
def get_table(self):
return Table(self.name, self.metadata, Column('bone', String))
样本用法:
def f():
spot = Dog("Spot")
spot_stash = spot.get_table()
f()
f()
例外:
InvalidRequestError:表' Spot'已经为此MetaData定义了 实例。指定' extend_existing = True'重新定义选项和 现有Table对象上的列。
我无法连续两次调用函数f()
,因为元数据是全局的。我不想" extend_existing",只需从程序中的其他位置调用独立函数。我没有看到如何使Base
非全局,因为静态类声明依赖于它。有没有办法使用这种史诗比例的全局变量?
答案 0 :(得分:0)
您似乎试图将表格与Dog
类相关联,但实际上是在Table
方法中创建新 get_table()
。这就是为什么它抱怨当前数据库中已存在 Table 的原因。