Форум сайта python.su
Не получается залить файл в таблицу с полем “data”, которое имеет тип BLOB.
Вот код:
# -*- coding: cp866 -*-
f=open(r"C:\\1.txt", "r")
import MySQLdb
con = MySQLdb.connect (host="xxx", user="xxx", passwd="xxx", db="xxx")
cur = con.cursor()
sql="""INSERT INTO `xxx` (`data`) VALUES ('""" + f + """')"""
print sql
try:
cur.execute(sql)
except MySQLdb.DatabaseError, err:
print u"Error ", err
else:
print u"Запрос выполнен"
Traceback (most recent call last):
File "C:\Users\Mictian\Desktop\3.py", line 12, in <module>
sql="""INSERT INTO `xxx` (`data`) VALUES ('"""+f+"""')"""
TypeError: cannot concatenate 'str' and 'file' objects
Офлайн
осмелюсь пердположить, что ось - windows. тогда попробуйте так
import MySQLdb
con = MySQLdb.connect (host="xxx", user="xxx", passwd="xxx", db="xxx")
cur = con.cursor()
try:
with open(r"C:\1.txt", "rb") as f:
sql="""INSERT INTO `xxx` (`data`) VALUES ('""" + f.read() + """')"""
print sql
cur.execute(sql)
# хотя более политкорректно, ИМХО, будет так
# sql="INSERT INTO 'xxx' ('data') VALUES (?)"
# cur.execute(sql, [f.read(),])
except IOError, e:
# вдруг с файлом что-то не так
...
except MySQLdb.DatabaseError, err:
print u"Error ", err
else:
print u"Запрос выполнен"
Офлайн
> f.read()
так нельзя, если в файле будет sql инъекция то она выполниться, если штатного механизма не найдете то можно перекодировать содержимое в base64, но от этого файл в базе будет в 1,5-2 раза больше весить.
Офлайн
возможно вот так схавает:
sql="""INSERT INTO `xxx` (`data`) VALUES (?)"""
cur.execute(sql,f)
Офлайн