使用SQLAlchemy 0.7.8和Python2.7(在Python2.6中也可以看到)。在
我有一个脚本,它将从数据库中读取表X并创建表X1。在
我的数据库有表A、B、C、D。我启动四个完全独立的进程来创建表A1、B1、C1、D1。在
我观察到的是一种比赛状态metadata.create\u all进程B中的()也尝试创建表A1,但由于进程A已创建A1而失败。显式地使用checkfirst=True(这是默认值)没有帮助。在
我不明白为什么metadata.create\u all进程B的()尝试创建非B表。它怎么知道其他进程正在处理其他表呢?我可以在不使用create_all()的情况下探索实现所需操作的方法,但这似乎很奇怪。如果有区别的话,它在Postgres9.2服务器上。在
是否有多个模型共享相同的元数据?很有可能(这是默认方式)。在
引用the docs:
因此,只要脚本中存在所有表的描述,就会使
create_all
创建这些表。如果知道要创建哪个表,可以调用该表上的create()
,或者将模型列表传递给create_all()
,并让它按正确的创建顺序进行排序。在相关问题 更多 >
编程相关推荐