如果您正在寻找创建动态类和表,您可以使用基于我在此处找到的本教程 URL 的以下技术 ( http://sparrigan.github.io/sql/sqla/2016/01/03/dynamic-tables.html),我修改了他的做法。
from sqlalchemy import create_engine
engine = create_engine('sqlite:///test.db', echo=True)
from sqlalchemy import Column, Integer,Float,DateTime, String, MetaData
metadata = MetaData()
from sqlalchemy.ext.declarative import declarative_base
from sqlalchemy.orm import sessionmaker
Session = sessionmaker(bind=engine)
session = Session() # create a Session
Base = declarative_base()
首先包括所有需要的依赖项并创建你的会话和基础。
动态创建它的关键在这里:
attr_dict = {'__tablename__': 'default','id': Column(Integer, primary_key=True, auto_increment=True)}
您可以通过利用python中的“类型”函数来创建一个表。
myClass = type('ClassnameHere', (Base,), attr_dict)
请注意,我们正在传递attr_dict,这将为我们的类提供所需的表名和列信息,但不同之处在于我们通过字符串定义类名!这意味着您可以创建一个循环,例如遍历字符串数组以开始动态创建表!
接下来你所要做的就是简单地打电话
Base.metadata.create_all(engine)
因为我们创建的动态类继承自Base,所以该命令将简单地创建表!
您现在添加到此表中,例如:
SomeRow = myClass(id='2')
session.add(SomeRow)
session.commit()
如果您也不知道列名,这可能会更进一步。只需参考文章以了解如何做到这一点。
你基本上会做这样的事情:
firstColName = "Ill_decide_later"
secondColName = "Seriously_quit_bugging_me"
new_row_vals = myClass(**{firstColName: 14, secondColName: 33})
** 运算符获取对象并将其解包,以便使用赋值运算符添加 firstColName 和 secondColName,因此它本质上与以下内容相同:
new_row_vals = myClass(firstColName=14, secondColName=33)
这种技术的优点是现在您可以动态添加到表中,甚至不必定义列名!
例如,这些列名可以存储在字符串数组中,也可以存储在您想要的任何内容中,您只需从那里获取它。