【发布时间】:2017-05-10 03:10:55
【问题描述】:
一个示例程序:
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' 已为此元数据定义 实例。指定 'extend_existing=True' 重新定义选项和 现有 Table 对象上的列。
我不能连续调用函数f() 两次,因为元数据是全局的。我不想“extend_existing”,只是从程序的不同位置调用一个独立的函数。我看不到如何使 Base 成为非全局的,因为静态类声明依赖于它。有没有办法使用如此庞大的全局变量?
【问题讨论】:
-
get_table()函数的用途是什么?你可以解释吗。有什么用例吗? -
@Laurent LAPORTE ...因此,对于狗窝中的每只狗,我想取每只狗的桌子,他放骨头的地方并添加一个 t 骨。稍后在程序中,我想重新创建狗并再次获取它们各自的表以进行另一次操作。
-
对不起,我迷路了。 “取每只狗的桌子”是什么意思,你说的是记录吗?
-
@Laurent LAPORTE 每只狗都是一个复杂的产品,有许多与之关联的表,更像是整个数据库。它们跨越数百万行数据,并为我们公司的每条狗提供略有不同的列集。
标签: python orm sqlalchemy