8

mysqldb(Python用のmysqlモジュール)に非常に奇妙な問題があります。

テーブルにレコードを挿入するためのクエリを含むファイルがあります。ファイルから関数を呼び出すと、問題なく機能します。しかし、別のファイルから関数の1つを呼び出そうとすると、

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

そして、クラスデータベースは次のとおりです。

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

問題は解決しました。データベースを 2 回初期化していました。

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

このようにして、SQLインジェクション攻撃を軽減するために必須のdbモジュールの入力エスケープを利用できます。

于 2011-04-20T08:32:26.927 に答える