2016-04-19 6 views
1

データベース 'menagerie'に 'authors'というテーブルがあります.IDと写真の2つのカラムがあります.IdはINTで、写真はBLOBです。私の完全なコードPython 'TypeError:フォーマット文字列の引数が足りません' mysqlクエリを実行中

import MySQLdb 

conn = MySQLdb.connect("localhost","root","rset","menagerie") 
cursor = conn.cursor() 


def read_file(filename): 
    with open(filename, 'rb') as f: 
     photo = f.read() 
    return photo 

def update_blob(author_id, filename): 
    # read file 
    data = read_file(filename) 

    # prepare update query and data 
    query = "UPDATE authors SET photo = %s WHERE id = %s" 

    #query blob data form the authors table 
    cursor.execute(query, (author_id,)) 
    photo = cursor.fetchone()[0] 
    cursor.close() 
    conn.close() 

def main(): 
update_blob(1,"d:/Emmanu/project-data/bc1.jpg") 

if __name__ == '__main__': 
main() 

答えて

0

は以下とみているが

query = "UPDATE authors SET photo = %s WHERE id = %s" 
cursor.execute(query, (data, author_id)) 
を変更

TypeError: not enough arguments for format string 

として、私はエラーを取得していますmysqlデータベースのテーブルに格納する画像にしてみてください

%sは、適切なエスケープ処理(およびSQLインジェクションを避けるため)を処理するSQLリテラルに変換されるプレースホルダです。あなたが.format(data, author_id)でやろうとし、その後、元のexecuteコール内の1つの項目のタプルとしてauthor_idを提供するが、提案された変更は、あなたのために働くかどうかを確認し、どのような

わかりません。あなたは今

import MySQLdb 

conn = MySQLdb.connect("localhost","root","rset","menagerie") 
cursor = conn.cursor() 


def read_file(filename): 
    with open(filename, 'rb') as f: 
     photo = f.read() 
    return photo 

def update_blob(author_id, filename): 
    # read file 
    data = read_file(filename) 

    # prepare update query and data 
    query = "UPDATE authors SET photo = %s WHERE id = %s" 

    #query blob data form the authors table 
    cursor.execute(query, (data, author_id)) 
    cursor.close() 
    conn.close() 

def main(): 
    update_blob(1,"d:/Emmanu/project-data/bc1.jpg") 

if __name__ == '__main__': 
    main() 
+0

で終わるだろうこれらの変更により

に変更エラー「例外TypeError:足りない引数をフォーマット文字列は」すべてのオットトレースバックと同じです。 – Emmanu

+0

あなたは間違ったことがあるので、質問をあなたの変更(元の既存のコードより下)で更新できますか?私はちょうど私が何も見逃していないことを確認するためにローカルでこれを試したところ、うまくいきました。 – sberry

+0

質問が更新されました – Emmanu

関連する問題