2016-04-19 2 views
1

У меня есть таблица под названием «авторы» в базе данных «menagerie». В ней есть два столбца Id и photo.Id - INT, а фото BLOB.when я попытаться сохранить изображение, чтобы тузда таблица базы данных я получаю ошибку, какPython 'TypeError: недостаточно аргументов для строки формата' при запуске mysql-запроса

TypeError: not enough arguments for format string 

Мой полный код

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

%s является заполнителем, который преобразуется в литерал SQL для обработки надлежащего экранирования (и избегает инъекции SQL).

Не уверен, что вы пытаетесь сделать с .format(data, author_id), а затем обеспечивая author_id как кортеж один пункт в оригинальном execute вызова, но увидеть, если предлагаемые изменения работают для вас.

С этими изменениями вы бы в конечном итоге с

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: не хватает аргументов для строки формата» все флористику TRACEBACK одинаковы. – Emmanu

+0

Можете ли вы обновить вопрос своими изменениями (ниже исходного кода), потому что тогда у вас что-то еще не так. Я просто попробовал это локально, чтобы убедиться, что я ничего не пропустил, и все получилось просто отлично. – sberry

+0

Вопрос обновлен – Emmanu

Смежные вопросы