Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/python/319.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/mysql/68.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Python 命令不同步您可以';现在不要运行这个命令_Python_Mysql_Synchronization_Mysql Python - Fatal编程技术网

Python 命令不同步您可以';现在不要运行这个命令

Python 命令不同步您可以';现在不要运行这个命令,python,mysql,synchronization,mysql-python,Python,Mysql,Synchronization,Mysql Python,我正在尝试使用mysqldb创建一些表 问题是,在执行python脚本db.pymysql时,会抛出错误: _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("

我正在尝试使用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)
);
根据定义,当以错误的顺序调用客户端函数时,会出现此错误。看看我用的那些(我想我只有3个),它们看起来顺序正确。首先连接到数据库,获取光标,最后执行查询以创建表。这是错误的顺序吗?在连接到数据库之前执行查询似乎不符合逻辑

编辑:在用表填充数据库后,我尝试关闭连接,但没有任何区别

EDIT2:此外,我试图完全删除数据库并重新创建它,但mysql仍然抛出相同的错误

EDIT3:我发现如果我删除
表顶部的两个
DROP TABLES if EXISTS tablename
-语句,我就不会得到错误。但是似乎只创建了第一个表(test)(使用mysql命令行客户端中的
showtables;
来验证这一点)!那到底是怎么回事


EDIT4:所以我进一步隔离了问题,它与烧瓶无关

好吧,我发现我必须一个接一个地执行这些语句。我现在这样做:

from flask import current_app, g

import MySQLdb
import MySQLdb.cursors
import re

def init_db():
    db_conn = get_db_conn()
    cursor = db_conn.cursor()
    f = current_app.open_resource("tables.sql")
    tables = f.read().decode('utf-8').split(';')
    f.close()
    for table in tables:
        table = re.sub('[\n\r]', '', table)
        if len(table) > 0:
            cursor.execute(table)

你听说过炼金术吗?有一个版本的烧瓶,它处理了很多这方面的东西,为你提供了很多其他的乐趣goodies@timthompson谢谢你的提示,我待会儿再查@但我真的很想知道这里发生了什么!尝试
cursor.execute(f.read(),multi=True)