Я пытаюсь создать несколько таблиц, используя 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()
tables.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 docs эта ошибка возникает, когда клиентские функции вызываются в неправильном порядке. Глядя на те, которые я использую (у меня есть только 3, я думаю), они выглядят в правильном порядке. Сначала подключаемся к базе данных, получаем курсор и, наконец, выполняем запрос для создания таблиц. Это неправильный порядок? Казалось бы, логично выполнить запрос перед подключением к базе данных ...
РЕДАКТИРОВАТЬ: я пытался закрыть соединение после заполнения базы данных таблицами, но это не имеет значения.
EDIT2: Более того, я попытался полностью удалить базу данных и заново создать ее, но mysql по-прежнему выдает ту же ошибку.
EDIT3: я обнаружил, что, если я удаляю два DROP TABLES IF EXISTS tablename
-этапа в верхней части tables.sql
, я не получаю ошибку. Но, кажется, только первая таблица (test) была создана (используя SHOW TABLES;
в клиенте командной строки mysql, чтобы проверить это)! Что, черт возьми, там происходит?
РЕДАКТИРОВАТЬ 4: Таким образом, я изолировал проблему дальше, это не имеет ничего общего с колбой.