您的create()命令提交当前shell的事务,但不对第二个shell中的事务执行任何操作.
你的第二个线程无法看到第一个线程在第一个线程中完成,因为它在自己的事务中.事务隔离数据库,以便在提交事务时,所有事件都在单个时间点发生,包括select语句.这是ACID中的A.尝试运行
from django.db import transaction; transaction.commit()
在第二个shell中.这应该提交当前事务并开始一个新事务.如果你没有修改当前shell中db的任何内容,你也可以使用transaction.rollback()来实现相同的功能.
编辑编辑:
您可能需要获取特定的数据库连接才能使其正常工作.试试这个:
import django.db
django.db.connection._commit()
有关此问题的更多信息:
相关的一点是:
If you want script1.py (using an InnoDB table) to see committed updates from
other transactions you can change the transaction isolation level like so:
from django.db import connection
connection.cursor().execute('set transaction isolation level read
committed')
Alternatively you can enable the database's version of auto-commit, which
"commits" queries as well as updates, so that each new query by script1 will
be in its own transaction:
connection.cursor().execute('set autocommit=1')
Either one allows script1 to see script2's updates.
所以,tl; dr是你需要将InnoDB事务隔离设置为READ-COMMITTED.