我正在努力通过SQLAlchamy来理解它的文档和教程。
我看到如何从数据库表中自动加载类,我看到如何设计一个类并从中创建(声明性地或使用mapper())一个添加到数据库的表。
我的问题是如何编写创建表格的代码(例如首次运行)然后重复使用?
我不想用一个工具或一段代码创建数据库,并且有单独的代码来使用数据库。
提前致谢, 彼得
答案 0 :(得分:1)
create_all()
不会执行任何操作,因此只需在设置引擎或连接后立即调用它。
(请注意,如果您更改您的表架构,create_all()
将不更新它!所以您仍然需要“另一个程序”来执行此操作。)
这是通常的模式:
def createEngine(metadata, dsn, **args):
engine = create_engine(dsn, **args)
metadata.create_all(engine)
return engine
def doStuff(engine):
res = engine.execute('select * from mytable')
# etc etc
def main():
engine = createEngine(metadata, 'sqlite:///:memory:')
doStuff(engine)
if __name__=='__main__':
main()
答案 1 :(得分:0)
我认为你可能会过度思考这种情况。如果你想重新创建数据库,通常只需要调用Base.metadata.create_all()
或同等数据,如果你不想这样做,就不要调用它。
您可以尝试每次调用它并在出现错误时处理异常,假设已经设置了数据库。
或者您可以尝试查询某个表格,如果失败,请致电create_all()
将所有内容放到位。
无论您是否执行数据库创建,应用程序的每个其他部分都应以相同的方式工作。