SQL炼金术核心metadata.create\u all()正在尝试在Python进程外创建表

2024-09-28 23:43:49 发布

您现在位置:Python中文网/ 问答频道 /正文

使用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服务器上。在


Tags: 脚本数据库truesqlalchemy进程状态a1create
1条回答
网友
1楼 · 发布于 2024-09-28 23:43:49

是否有多个模型共享相同的元数据?很有可能(这是默认方式)。在

引用the docs

Create all tables stored in this metadata.

因此,只要脚本中存在所有表的描述,就会使create_all创建这些表。如果知道要创建哪个表,可以调用该表上的create(),或者将模型列表传递给create_all(),并让它按正确的创建顺序进行排序。在

相关问题 更多 >