Найти - Пользователи
Полная версия: Как залить файл в MySQL BD?
Начало » Базы данных » Как залить файл в MySQL BD?
1
Mictian
Не получается залить файл в таблицу с полем “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
Суть ошибки понял, но не знаю как исправить. Помогите пожалуйста (с Питоном ток вчера познакомился хДДД)!
pyuser
осмелюсь пердположить, что ось - 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"Запрос выполнен"
o7412369815963
> f.read()
так нельзя, если в файле будет sql инъекция то она выполниться, если штатного механизма не найдете то можно перекодировать содержимое в base64, но от этого файл в базе будет в 1,5-2 раза больше весить.
o7412369815963
возможно вот так схавает:
sql="""INSERT INTO `xxx` (`data`) VALUES (?)"""
cur.execute(sql,f)
This is a "lo-fi" version of our main content. To view the full version with more information, formatting and images, please click here.
Powered by DjangoBB