2011-04-18 30 views
6

我有一個mysqldb(python的mysql模塊)很奇怪的問題。mysqldb interfaceError

我有一個文件查詢插入表中的記錄。如果我從文件中調用函數,它就可以正常工作;但試圖調用的功能之一從另一個文件時,它拋出我

_mysql_exception.InterfaceError: (0, '')

我真的我在做什麼錯在這裏沒有得到..

我調用函數從buildDB.py

函數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的 從MySQLdb.constants導入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, '') 

的警告從來不是一個問題,所以我不認爲它是相關的。

+0

你可以提供查詢被調用的代碼嗎? – 2011-04-18 14:42:59

+0

當然,我編輯我的問題 – Johanna 2011-04-18 14:53:07

+0

你可以發佈回溯? – XORcist 2011-04-18 15:27:19

回答

0

我無法讓您的設置工作。我總是給我同樣的錯誤。但是,您連接並查詢查詢的db的方式似乎爲"non-standard"。 我有這個設置更好的運氣:

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注入攻擊的優勢。

+0

我試圖使用遊標,但它給了我一個錯誤「屬性錯誤:遊標」而我不明白爲什麼。這就是爲什麼我不使用它..也許你可以幫助我呢? – Johanna 2011-04-21 08:06:42

+0

是的,你使用MySQLdb包的方式是'非標準'(說明文檔)。當您使用MySQLdb.Connection(使用大寫C)時,您會得到一個具有__cursor__方法的連接對象。 – XORcist 2011-04-25 20:27:36

2

問題已解決..我正在初始化數據庫兩次..對不起,如果你失去了閱讀本書的時間!

+0

你還在使用* query *方法嗎?我認爲它不允許param替代。由於SQL注入攻擊的可能性,這是一個很大的安全風險。如果有任何用戶輸入,應始終首先由db模塊轉義。 – XORcist 2011-04-20 10:20:07

18

我在嘗試使用關閉的連接時出現此錯誤。

+2

這包括如果連接內部關閉,而不僅僅是在連接上調用close() – demongolem 2013-02-13 16:59:16