我正在尝试使用 mysqldb 创建一些表。
问题是当执行python脚本时db.py
mysql 抛出错误:
_mysql_exceptions.ProgrammingError:(2014,“命令不同步;您现在无法运行此命令”)
db.py:
import MySQLdb
import MySQLdb.cursors
def init_db():
db_conn = get_db_conn()
cursor = db_conn.cursor()
with open("tables.sql", 'r') as f:
cursor.execute(f.read())
def get_db_conn():
return MySQLdb.connect(
host="localhost",
user="root",
passwd="secretcat",
db="uptrender",
cursorclass=MySQLdb.cursors.DictCursor
)
init_db()
表.sql:
DROP TABLE IF EXISTS Test2;
DROP TABLE IF EXISTS Test;
CREATE TABLE Test (
id INT NOT NULL
);
CREATE TABLE Test2 (
id INT NOT NULL,
FOREIGN KEY(id) REFERENCES Test(id)
);
根据mysql 文档 https://dev.mysql.com/doc/refman/8.0/en/commands-out-of-sync.html当以错误的顺序调用客户端函数时,会出现此错误。看看我使用的那些(我认为我只有 3 个),它们看起来顺序正确。首先连接数据库,获取游标,最后执行查询创建表。这是错误的顺序吗?在连接到数据库之前进行查询似乎不合逻辑......
编辑:我尝试在用表填充数据库后关闭连接,但这没有什么区别。
EDIT2:此外,我尝试完全删除数据库并重新创建它,但 mysql 仍然抛出相同的错误。
EDIT3:我发现如果我删除这两个DROP TABLES IF EXISTS tablename
- 顶部的语句tables.sql
我没有收到错误消息。但似乎只创建了第一个表(测试)(使用SHOW TABLES;
在mysql命令行客户端中验证这一点)!那里到底发生了什么事?
EDIT4:所以我进一步隔离了问题,它与烧瓶无关。