动态创建一组SQLAlchemy表

4 投票
1 回答
3385 浏览
提问于 2025-04-18 16:42

我用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')

有没有简单的方法可以创建这一组表,它们都有相同的列定义(但是每个表的名字不同),而不需要重复写表的定义呢?

1 个回答

6

这里用字典会是个不错的选择。你可以试试像这样的写法:

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)])

这样的结构可能正是你需要的。它还可以让你像在循环中一样自动创建字典的键。

补充说明:我原本以为你是在创建 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") 来调用它。

撰写回答