2017-02-25 12 views
0

データベースに挿入しようとしていますが、何も起こりません。エラーはありません。Pythonでmysql dbに挿入できません

クラス:

class Database: 

host = 'localhost' 
user = 'root' 
password = '' 
db = 'quinielas' 

def __init__(self): 
    self.connection = MySQLdb.connect(self.host, self.user, self.password, self.db) 
    self.connection.autocommit(True) 
    self.cursor = self.connection.cursor() 

def insert(self, query): 
    try: 
     self.cursor.execute(query) 
     self.connection.commit() #metodo para acceptar actualizaciones 

    except MySQLdb.Error: 
     self.connection.rollback() #metodo para descartar actualizaciones 


def query(self, query): 
    cursor = self.connection.cursor(MySQLdb.cursors.DictCursor) 
    cursor.execute(query) 

    return cursor.fetchall() 

def __del__(self): 
    self.connection.close() 

クエリ:

db = Database() 
query = "INSERT INTO jugadores (`name`, `r1`, `r2`, `r3`, `r4`," \ 
       " `r5`, `r6`, `r7`, `r8`, `r9`)" \ 
       " VALUES (%s, %d, %d, %d, %d, %d, %d, %d, %d, %d)" 
db.insert(query .format(name, r1, r2, r3, r4, r5, r6, r7, r8, r9)) 

私は次のlibとのpython 2.7を使用しています: https://pypi.python.org/pypi/MySQL-python/1.2.5#downloads

答えて

0

まず、あなたが出力にあなたのexceptにメッセージを必要としますtry/catchのMySQL例外を参照してください。 2番目の文字列補間は、%演算子と.format()メソッドを組み合わせています。 %演算子は%s(文字列の場合)と%d(数値の場合)を使用しますが、.formatは任意のタイプのプレースホルダに対して中括弧{}を使用します。連結された文字列を作成するには、いずれかのバージョンを選択する必要があります。

ただし、SQLでは、パラメータとしてバインドする必要があるため、値をクエリに渡すときにはどちらも使用しないでください。ほとんどのPython-MySQL APIでは、プレースホルダは%sです。Pythonの%オペレータの文字列プレースホルダと混同しないでください。例として、他のRDMSは?プレースホルダを使用します。

定義クラスのメソッドデータベースを調整して、2番目のオプショナル引数cursor.execute(operation, params=None, multi=False)で使用するタプルまたはパラメータのリストを受け取ることを検討してください。また、適切な文字列フォーマットは、例外メッセージのために示されている:

db = Database() 
preparedstmt = "INSERT INTO jugadores (`name`, `r1`, `r2`, `r3`, `r4`," \ 
       " `r5`, `r6`, `r7`, `r8`, `r9`)" \ 
       " VALUES (%s, %s, %s, %s, %s, %s, %s, %s, %s, %s)" 
params_tuple = (name, r1, r2, r3, r4, r5, r6, r7, r8, r9) 

db.insert(preparedstmt, params_tuple) 
+0

おかげで男は本当に:

def insert(self, query, parameters): try: self.cursor.execute(query, parameters) self.connection.commit() #metodo para acceptar actualizaciones except MySQLdb.Error as e: print('MySQL error is: {}'.format(e)) self.connection.rollback() #metodo para descartar actualizaciones 

その後、フォーマットさない文字列があるプリペアドステートメントとパラメータのリストを渡すための呼び出しを調整しますよく説明されています。私はPythonで新しいので、私は一種の失われました。 –

+0

素晴らしいこれが助けられた場合、解決を確認するために受け入れてください。または、追加の質問について助言してください。 – Parfait

関連する問題