Уведомления

Группа в Telegram: @pythonsu

#1 Окт. 4, 2010 22:34:20

Mictian
От:
Зарегистрирован: 2010-10-04
Сообщения: 1
Репутация: +  0  -
Профиль   Отправить e-mail  

Как залить файл в MySQL BD?

Не получается залить файл в таблицу с полем “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
Суть ошибки понял, но не знаю как исправить. Помогите пожалуйста (с Питоном ток вчера познакомился хДДД)!



Офлайн

#2 Окт. 5, 2010 01:56:53

pyuser
От:
Зарегистрирован: 2007-05-13
Сообщения: 658
Репутация: +  36  -
Профиль   Отправить e-mail  

Как залить файл в MySQL BD?

осмелюсь пердположить, что ось - 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"Запрос выполнен"



Офлайн

#3 Окт. 5, 2010 05:50:23

o7412369815963
От:
Зарегистрирован: 2009-06-17
Сообщения: 1986
Репутация: +  32  -
Профиль   Отправить e-mail  

Как залить файл в MySQL BD?

> f.read()
так нельзя, если в файле будет sql инъекция то она выполниться, если штатного механизма не найдете то можно перекодировать содержимое в base64, но от этого файл в базе будет в 1,5-2 раза больше весить.

Офлайн

#4 Окт. 5, 2010 05:51:30

o7412369815963
От:
Зарегистрирован: 2009-06-17
Сообщения: 1986
Репутация: +  32  -
Профиль   Отправить e-mail  

Как залить файл в MySQL BD?

возможно вот так схавает:

sql="""INSERT INTO `xxx` (`data`) VALUES (?)"""
cur.execute(sql,f)

Офлайн

Board footer

Модераторировать

Powered by DjangoBB

Lo-Fi Version