mysqldb接口错误

8 投票
3 回答
12474 浏览
提问于 2025-04-16 15:58

我在使用mysqldb(Python的mysql模块)时遇到了一个很奇怪的问题。

我有一个文件,里面是用来插入记录到表中的查询语句。如果我直接调用这个文件里的函数,一切都正常;但是当我试图从另一个文件调用其中一个函数时,就出现了一个错误:

_mysql_exception.InterfaceError: (0, '')

我真的搞不懂我哪里出错了……

我是在buildDB.py文件中调用这个函数的:

import create

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

而这个函数newFormat(..)是在create.py文件中(已经导入):

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)

还有,Database类的代码如下:

import MySQLdb
from MySQLdb.constants import 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, '')

之前这个警告从来没有出过问题,所以我觉得它和这个没有关系。

3 个回答

1

我无法让你的设置正常工作。每次都给我同样的错误。不过,你连接数据库和使用query进行查询的方式似乎是“非标准”的。我用这个设置效果更好:

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))

这样你可以利用数据库模块的输入转义功能,这对防止SQL注入攻击是非常重要的。

3

问题解决了.. 我是把数据库初始化了两次.. 如果你花时间看这个,我很抱歉!

20

我在尝试使用一个已经关闭的连接时遇到了这个错误。

撰写回答