2016-04-19 4 views
1

Ich habe eine Tabelle namens 'Autoren' in der Datenbank 'Menagerie'.What hat zwei Spalten ID und photo.Id ist INT und Foto ist BLOB.when I ich erhalte Fehler alsPython 'TypeError: nicht genug Argumente für Formatzeichenfolge' beim Ausführen von MySQL Abfrage

TypeError: not enough arguments for format string 

Mein vollständiger Code zum speichern von Bild versuchen zu mySQL Datenbank-Tabelle ist

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

Antwort

0

mit folgenden versuchen ändert

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

%s ist ein Platzhalter, der in ein SQL-Literal konvertiert wird, um das richtige Escaping zu behandeln (und SQL-Injektion zu vermeiden).

nicht sicher, was Sie mit .format(data, author_id) vorhatten, und dann author_id als ein Element Tupel in Ihrer ursprünglichen execute Anruf bereitstellt, sondern sehen, ob die vorgeschlagenen Änderungen für Sie arbeiten. ‚: Nicht genügend Argumente für Formatstring Typeerror‘ alle othe Zurückverfolgungs sind gleiche

Mit diesen Änderungen, die Sie mit

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

Jetzt geändert Fehler enden würde. – Emmanu

+0

Können Sie die Frage mit Ihren Änderungen (unter dem ursprünglichen vorhandenen Code) aktualisieren, weil Sie dann etwas anderes falsch haben. Ich habe es gerade vor Ort ausprobiert, um sicher zu gehen, dass ich nichts vermisst habe und es hat gut geklappt. – sberry

+0

Frage aktualisiert – Emmanu

Verwandte Themen