2011-04-18 12 views
6

Mysqldb (python için mysql modülü) ile çok garip bir sorunum var.mysqldb interfaceError

Tablolara kayıt eklemek için sorgu içeren bir dosyam var. Dosyadan işlevleri çağırırsam, iyi çalışır; Başka bir dosyadan işlevlerden birini aramaya çalışırken ama bana buildDB.py gelen işlevi çağırmak bir

_mysql_exception.InterfaceError: (0, '')

Burada yanlış yapıyorum ben gerçekten alamadım

..

atar:

fonksiyonu newFormat (..) create.py olan (ithal):

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) 

Ve sınıf Veritabanı şudur: MySQLdb.constants

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) 

field_type (Ben sadece ilgili kodu koymak) ithal gelen

ithalat MySQLdb

traceback:

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

Uyarı daha önce hiç sorun olmamıştı, bu yüzden bunun alakalı olduğunu düşünmüyorum.

+0

Sorgunun çağrıldığı kodu sağlayabilir misiniz? –

+0

Elbette, – Johanna

+0

sorgusu düzenledim, traceback'i gönderir misiniz? – XORcist

cevap

0

Kurulumunuzu işe yaratamadım. Bana her zaman aynı hatayı veririm. Ancak, sorgusu ile db'ye bağlanma ve sorgular yapma biçiminiz "non-standard" olarak görünüyor. Eğer sql enjeksiyon saldırıları azaltmak için bir zorunluluk olduğu kaçan db modülleri girdi yararlanabilir

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

Bu yol: Bu kurulum ile daha iyi şans oldu.

+0

Bir imleç kullanmayı denedim, ama bana bir hata veriyor "Öznitelik Hatası: imleç" Ve neden anlamıyorum. Bu yüzden kullanmıyorum. Belki bana yardım edebilir misin? – Johanna

+0

Evet, MySQLdb paketini kullanma şekliniz "standart olmayan" dır (belgelerden bahseder). MySQLdb.Connection (büyük C ile) kullandığınızda, __cursor__ yöntemi olan bir bağlantı nesnesi alırsınız. – XORcist

2

Sorun çözüldü .. Veritabanını iki kez başlatıyordum.

+0

Hala sorgu * yöntemini kullanıyor musunuz? Param alt katmanına izin vermediğini düşünüyorum. SQL enjeksiyon saldırıları olasılığı nedeniyle büyük bir güvenlik riski. Herhangi bir kullanıcı girişi varsa, her zaman db modülü tarafından ilk önce kaçılmalıdır. – XORcist

18

Kapalı bir bağlantı kullanmaya çalışırken bu hatayı aldım.

+2

Bağlantının dahili olarak kapatılmış olması, yalnızca bağlantıda 'close()' olarak adlandırılmış olmanız değil, buna dahildir. – demongolem

İlgili konular