Добро пожаловать в форум, Guest  >>   Войти | Регистрация | Поиск | Правила | В избранное | Подписаться
Все форумы / Вопрос-Ответ Новый топик    Ответить
 Запись данных в поле MEMO  [new]
Antoni
Member

Откуда:
Сообщений: 3
Мне нужно записать в поле БД "длинную" двоичную информацию (допустим некий файл).
По порядку, как я пробовал:
1. Создал в таблице Users поле типа MEMO AidR (MEMO ведь для таких случаев и предназначено, верно?), пробую:
cur.execute(u"UPDATE Users SET AidR ='"+pickle.dumps(data, False)+u"' WHERE Id = "+str(id))

data - структура данных, которая сериализуется и записывается.

Пробую - не вышло.

2. Оказывается в полученной строке встречались символы ' (кавычки). Хорошо:
cur.execute(u"UPDATE Users SET AidR ='"+pickle.dumps(data, False).replace("'", "*")+u"' WHERE Id = "+str(id))

Звездочка не встречается так, что при чтении можно назад заменить.
Не вышло :-(
Вообще структура data большая. Подозреваю, что SQL выражение получилось ооочень длинным и не прошло.

Вопрос: а как вообще в MEMO большие двоичные данные записывают/читают?
21 июл 05, 11:14    [1723140]     Ответить | Цитировать Сообщить модератору
 Re: Запись данных в поле MEMO  [new]
Kull Damned
Member [заблокирован]

Откуда: Князь Мышкин
Сообщений: 34357
На чем пишешь. под какой сервер?
21 июл 05, 13:01    [1723695]     Ответить | Цитировать Сообщить модератору
 Re: Запись данных в поле MEMO  [new]
Antoni
Member

Откуда:
Сообщений: 3
Гм.. извиняюсь, оказывается все прошло :-)
Я просто неправильно смотрел :-)
Все нормально записалось и считалось.

Структура данных порядка 3 Кб. Т.е. выражение SQL порядка 3 Кб получилось, но все Ok.

Хотя, все равно, хотелось бы знать. Как принято правильно работать с длинными бинарными строками и полем MEMO. Какой длинны максимально можно прогонять через UPDATE запрос. И все таки, в MEMO ведь можно отправить гигабайты. Как это корректно делается (ведь не одним UPDATE запросом длинной в гигабайт?), как это принято.

Пишу на Python 2.3.3 обращаюсь к Microsoft Jet MDB базе данных через Python DB API 2.0. (в принципе, какая СУБД и какой язык мне вторично, вопрос это не меняет)
21 июл 05, 13:22    [1723827]     Ответить | Цитировать Сообщить модератору
 Re: Запись данных в поле MEMO  [new]
Kull Damned
Member [заблокирован]

Откуда: Князь Мышкин
Сообщений: 34357
В таких случаях народ создает запросы типа
insert into XXX (MyBlob) values (:BBB)
Заливает в параметр BBB нужные данные и выполняет запрос.
21 июл 05, 14:09    [1724085]     Ответить | Цитировать Сообщить модератору
 Re: Запись данных в поле MEMO  [new]
Kull Damned
Member [заблокирован]

Откуда: Князь Мышкин
Сообщений: 34357
Antoni
Пишу на Python 2.3.3 обращаюсь к Microsoft Jet MDB базе данных через Python DB API 2.0.
Почитай доку по этому API на предмет параметризированных запросов.
21 июл 05, 14:10    [1724091]     Ответить | Цитировать Сообщить модератору
 Re: Запись данных в поле MEMO  [new]
Antoni
Member

Откуда:
Сообщений: 3
Kull Damned
В таких случаях народ создает запросы типа
insert into XXX (MyBlob) values (:BBB)
Заливает в параметр BBB нужные данные и выполняет запрос.


И чего, если я напишу

UPDATE Test SET Pole1 = 'oeu... 500Мб строка ...oeuoeu' WHERE Id = 123

все пройдет нормально?

Параметризованные запросы там есть, но я так понимаю, все равно составляется одна строка-запрос и посылается.
21 июл 05, 14:25    [1724171]     Ответить | Цитировать Сообщить модератору
 Re: Запись данных в поле MEMO  [new]
DocAl
Member

Откуда: Оккупирую западный берег
Сообщений: 10467
Ограничения на размер, вероятно, есть, но они измеряются мегабайтами, а не килобайтами.
21 июл 05, 15:08    [1724462]     Ответить | Цитировать Сообщить модератору
 Re: Запись данных в поле MEMO  [new]
Kull Damned
Member [заблокирован]

Откуда: Князь Мышкин
Сообщений: 34357
Antoni
И чего, если я напишу

UPDATE Test SET Pole1 = 'oeu... 500Мб строка ...oeuoeu' WHERE Id = 123

все пройдет нормально?
У разных серваков разные ограничения на длину строки запроса обычно максимальный рзмер в пределах 32-64 Кб, так штааа, делай выводы.
Antoni
Параметризованные запросы там есть, но я так понимаю, все равно составляется одна строка-запрос и посылается.
Нет, ты неправильно понимаешь. Грубо говоря: создается поток соединение-поток между клиентом и сервером. В котором передается строка вида UPDATE Test SET Pole1 = ? WHERE Id = ? и ЗА этой строкой передаются данные параметров ОТДЕЛЬНО. И сервер эту строку у себя подготавливает и по порядочку у себя расставляет вместо "?" твои данные. Если интересны механизмы - спроси у гуру или ищи статьи и книги, я для представляю лишь общий принцип - типа что бы я делал, если бы писал SQL-сервер.
21 июл 05, 16:32    [1724945]     Ответить | Цитировать Сообщить модератору
Все форумы / Вопрос-Ответ Ответить