SQLAlchemy插入表中,并将表名作为字符串传递

时间:2019-02-21 09:11:23

标签: python sqlalchemy sql-insert

我有一本有20个项目的字典。键实际上是表名,值是单个值,需要进入20个单独的表中。 如何在不编写20条if语句的情况下使用SQLAlchemy做到这一点?

示例:

class Table1(Base):
    __tablename__ = "table1"
    id = Column(Integer(), primary_key=True)
    value = Column(String())

class Table2(Base):
    __tablename__ = "table2"
    id = Column(Integer(), primary_key=True)
    value = Column(String())

class Table3(Base):
    __tablename__ = "table3"
    id = Column(Integer(), primary_key=True)
    value = Column(String())
...
class Table20(Base):
    __tablename__ = "table20"
    id = Column(Integer(), primary_key=True)
    value = Column(String())

mydict = {
    'table1': 'some value'
    'table2': 'some value'
    'table3': 'some value'
    ...
    'table20': 'some value'
}

现在我正在使用20条if语句:

for key, value in mydict.items():
    if key == 'table1':
        session.add(Table1(value=value))
    if key == 'table2':
        session.add(Table2(value=value))
    if key == 'table3':
        session.add(Table3(value=value))
    ...
    if key == 'table20':
        session.add(Table20(value=value))

1 个答案:

答案 0 :(得分:0)

您可以在Base.metadata.tables中查找表格,然后插入:

for tbl, value in mydict.items():
    stmt = Base.metadata.tables[tbl].insert().values(value=value)
    session.execute(stmt)