8

我对 mysqldb(python 的 mysql 模块)有一个非常奇怪的问题。

我有一个文件,其中包含用于在表中插入记录的查询。如果我从文件中调用函数,它工作得很好;但是当试图从另一个文件中调用其中一个函数时,它会给我一个

_mysql_exception.InterfaceError: (0, '')

我真的不明白我在这里做错了什么..

我从以下位置调用函数buildDB.py

import create

create.newFormat("HD", 0,0,0)

函数 newFormat(..) 在 create.py (imported) 中:

from Database import Database

db = Database()

def newFormat(name, width=0, height=0, fps=0):
    format_query = "INSERT INTO Format (form_name, form_width, form_height, form_fps)  VALUES ('"+name+"',"+str(width)+","+str(height)+","+str(fps)+");"
    db.execute(format_query)

类数据库如下:

从 MySQLdb.constants 导入 MySQLdb 导入 FIELD_TYPE

class Database():
    def __init__(self):
        server = "localhost"
        login = "seq"
        password = "seqmanager"
        database = "Sequence"
        my_conv = { FIELD_TYPE.LONG: int }

        self.conn = MySQLdb.connection(host=server, user=login, passwd=password, db=database, conv=my_conv)
        # self.cursor = self.conn.cursor()

    def close(self):
        self.conn.close()

    def execute(self, query):
        self.conn.query(query)

(我只放了相关代码)

追溯 :

Z:\sequenceManager\mysql>python buildDB.py
D:\ProgramFiles\Python26\lib\site-packages\MySQLdb\__init__.py:34: DeprecationWa
rning: the sets module is deprecated
  from sets import ImmutableSet
INSERT INTO Format (form_name, form_width, form_height, form_fps) VALUES ('HD',0
,0,0);
Traceback (most recent call last):
  File "buildDB.py", line 182, in <module>
    create.newFormat("HD")
  File "Z:\sequenceManager\mysql\create.py", line 52, in newFormat
    db.execute(format_query)
  File "Z:\sequenceManager\mysql\Database.py", line 19, in execute
    self.conn.query(query)
_mysql_exceptions.InterfaceError: (0, '')

该警告以前从未出现过问题,因此我认为它不相关。

4

3 回答 3

20

当我尝试使用关闭的连接时出现此错误。

于 2012-11-12T10:57:20.870 回答
3

问题已解决..我正在初始化数据库两次..如果您在阅读本文时浪费了时间,请见谅!

于 2011-04-20T09:55:54.197 回答
1

我无法让您的设置正常工作。我一直给我同样的错误。但是,您使用查询连接到数据库并对其进行查询的方式似乎是 “非标准的”。我对这个设置有更好的运气:

conn = MySQLdb.Connection(user="user", passwd="******", 
                          db="somedb", host="localhost")
cur = conn.cursor()
cur.execute("insert into Format values (%s,%s,%s,%s);", ("hd",0,0,0))

通过这种方式,您可以利用 db 模块输入转义,这是缓解 sql 注入攻击所必需的。

于 2011-04-20T08:32:26.927 回答