【问题标题】:dynamically creating a set of SQLAlchemy tables动态创建一组 SQLAlchemy 表
【发布时间】:2014-10-03 05:19:00
【问题描述】:

我有一个用 SQLAlchemy 声明式定义的简单表:

Base = declarative_base()
class MyTable(Base):
    __tablename__ = 'mytable1'
    row_id = Column(INT, primary_key=True)
    another_column = Column(CHAR(10))

我想创建一组表,名称如下:

table_names = ('mytable1', 'mytable2', 'mytable3', 'mytable4')

有没有一种简单的方法来创建这组表,所有表都具有相同的列定义(但每个都有自己的名称),而无需重复表定义?

【问题讨论】:

  • 你不应该用数据来命名变量,尤其是重要的数据。您应该将这些表存储在字典中。
  • @TheSoundDefense,我不确定我是否遵循 - 我重新表述了这个问题,以更清楚地表明我只是在寻找一种方法来定义一组具有不同名称但相同列的表定义

标签: python sqlalchemy


【解决方案1】:

字典是最好的方法。也许是这样的:

table_dict = {}
for i in range(4):   # Create
  table_name = "mytable" + str(i)
  table_dict[table_name] = MyTable(table_name)

for i in range(4):   # Query
  session.query(table_dict["mytable" + str(i)])

您可能正在寻找类似的东西。这也可以让您自动创建字典键,就像在 for 循环中一样。

编辑:我假设您正在创建 MyTable 类的实例,但再次查看似乎并非如此。我不知道 SQLAlchemy 的细节,但我猜你会想要使用 __init__ 函数创建 MyTable 实例。

编辑编辑:如果你想创建多个表对象,你可以创建一个函数来生成并返回一个新类。也许是这样的:

Base = declarative_base()

def TableCreator(tablename):
  class MyTable(Base):
    __tablename__ = tablename
    row_id = Column(INT, primary_key=True)
    another_column = Column(CHAR(10))
  return MyTable

然后您可以使用mytable1 = TableCreator("mytable1") 调用它。

【讨论】:

  • 对不起,我确实在寻找一种使用 SQLAlchemy 定义这些表的方法。我是新手,我看不到一个简单的方法来做到这一点。我编辑了问题以使其更清楚。
猜你喜欢
  • 2020-05-10
  • 2017-09-29
  • 2017-10-04
  • 2017-07-04
  • 1970-01-01
  • 2011-02-15
  • 2018-12-18
  • 2020-06-22
  • 2010-11-01
相关资源
最近更新 更多