Форум сайта python.su
Всем привет!
У меня есть такая таблица в БД:
CREATE TABLE “Reports_MCHS”
(
“Script” bytea,
“Name” text,
“Specify_params” integer,
)
WITH (OIDS=FALSE);
ALTER TABLE “Reports_MCHS” OWNER TO postgres;
В поле “Script” хранятся текстовые файлы - скрипты на питоне.
Пишу скрипт, который добавляет файлы в эту таблицу.
import sys
import psycopg2
HOST = ‘localhost’
DB_NAME = ‘gar’
DB_USER = ‘postgres’
DB_PASS = ‘'
“”“ Открываем файл и читаем его в строковую переменную ”“”
s=open(’report_29.py','r').read()
“”“обрамляем текст в кавычки”“”
s = “'” + s + “'”
“”“ Соединяемся с сервером БД ”“”
conn = psycopg2.connect(host=HOST,database=DB_NAME,user=DB_USER,password=DB_PASS)
curs = conn.cursor()
“”“Добавляем запись в таблицу БД”“”
curs.execute(“”“INSERT INTO ”Reports_MCHS“ VALUES (%s,'NewReport',4,'word',1,7,131)”“” % s)
conn.commit()
“”“Закрываем соединение с БД”“”
curs.close()
conn.close()
Что то не получается добавить таким образом файл в БД.
Правильно ли я добавляю файл - читаю в строку и добавляю за одну операцию INSERT в таблицу??
Или надо читать файл построчно и в цикле записывать строки в базу данных??
Заранее спасибо!
Офлайн
документацию читать пробовали?
mypic = open('picture.png', 'rb').read()
curs.execute("insert into blobs (file) values (%s)",
(psycopg2.Binary(mypic),))
Офлайн
В ответе выше есть пример применения psycopg2. Как понимаю это сторонний модуль.
Как выполнить эту задачу штатными средствами?
Необходимо в базу mdb добавить картинку в поле BLOB.
Офлайн
Хранить изображения в БД это уже хардкор… А для отображения все равно придется использовать сторонний модуль - PIL или Pillow. Если бы это извращение делал я, то поступил бы просто:
sqlalchemy + StringIO + PIL
Отредактировано 4kpt_II (Окт. 29, 2014 13:42:02)
Офлайн
Не моя затея хранить текстуры в БД. Мне надо подстраиваться.
Не понял Вашего метода.
Вот моя строка добавления данных в таблицу
Офлайн
Какой метод? Я написал, что родными средствами я бы это не реализовывал. sqlalchemy - это ОРМ для работы с SQL базами данных… Все это напилить легче в нем и не парить себе мозг всякими сложными SQL-запросами.
Офлайн
Для работы с БД я использую модуль pypyodbc, т.к. нет родных средств для работы с базами аксес mdb. Перерыл интернет. Не могу найти, как добавить картинку в базу mdb в поле BLOB. В чём сложность? что BLOB такой, что проблема с ним работать?
Есть поле БЛОБ, есть картинка, которую надо добавить. Вопрос в том, как? Неужели нет примера?
Офлайн
RucheyБлин, вот не поленился нашел машину с виндой и поставил pypyodbc, в чем вообще то проблема? Параметры надо биндить, а не в строку интерполировать.
Есть поле БЛОБ, есть картинка, которую надо добавить. Вопрос в том, как? Неужели нет примера?
import pypyodbc CREATE_TABLE = '''CREATE TABLE t1 ( id COUNTER PRIMARY KEY, name CHAR(25), datafile LONGBINARY );''' INSERT_IN = '''INSERT INTO t1 (name, datafile) VALUES (?, ?);''' #pypyodbc.win_create_mdb(r'C:\database.mdb') connection = pypyodbc.win_connect_mdb(r'c:\database.mdb') #connection.cursor().execute(CREATE_TABLE).commit() with open(r'C:\test.png', 'rb') as inf: connection.cursor().execute(INSERT_IN, ('TEST', inf.read())).commit()
Офлайн
PooH
PooHСпасибо за помощь, но пока у меня не выходит ничего.
Офлайн
RucheyЧто это? Я вам такого не показывал, посмотрите наконец пример, и почувствуйте разницу междуSQL = “INSERT INTO Textures (Name, TexType) VALUES ('{}', 1)”.format(name)
connection.cursor().execute('INSERT INTO t1 (name, datafile) VALUES (?, ?);', ('TEST', inf.read()))
SQL = “INSERT INTO Textures (Name, TexType) VALUES ('{}', 1)”.format(name) cur.execute(SQL)
Офлайн