Уведомления

Группа в Telegram: @pythonsu

#1 Окт. 3, 2010 13:33:43

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

Как работать с guid записями sqlite?

Есть база, написанная кем-то для .net и там повcюду завязано на guid.
При этом питон вытаскивает эти ячейки как некий тип buffer. Насильственное приведение str(…) результатов не даёт.
Как полечить? Я бы бросил эту затею на фиг, но дальше запрос с “where guid=…” делать и вот там обламываюсь окончательно.



Офлайн

#2 Окт. 3, 2010 14:30:36

Андрей Светлов
От:
Зарегистрирован: 2007-05-15
Сообщения: 3137
Репутация: +  14  -
Профиль   Адрес электронной почты  

Как работать с guid записями sqlite?

Можете привести кусочек кода? Не знал, что sqlite поддерживает GUID напрямую.
Насколько помню - поддерживаемые типы NULL, INTEGER, REAL, TEXT, BLOB.
К тому же в запросе можно указать .execute(“SELECT * FROM table WHERE guid=?”, guid)



Офлайн

#3 Окт. 3, 2010 15:49:58

Lexander
От:
Зарегистрирован: 2008-09-19
Сообщения: 1139
Репутация: +  33  -
Профиль   Отправить e-mail  

Как работать с guid записями sqlite?

Андрей Светлов
Можете привести кусочек кода? Не знал, что sqlite поддерживает GUID напрямую.
Не поддерживает. В ADO.NET есть врепер, который прозрачно для разработчика делает приведение типов.
Код простой: CREATE TABLE EXAMPLE (myguid GUID NOT NULL).
Делается преобразование к бинарному виду или текстовому в зависимости от настроек соединения. За это отвечает отдельный параметр.

Hohland
Посмотрите в SQLite Administrator на поле, где хранится GUID. Есть еще вариант, что разработчики заранее указали фиксированный тип при создании таблицы и сами делают необходимое преобразование, например HEX.



Офлайн

#4 Окт. 3, 2010 15:52:03

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

Как работать с guid записями sqlite?

В одном месте обошел вот так:

select q.imagepath,q.text,q.guid,a.text from QUESTIONS q join answers a on a.questionguid=q.guid

Но! Количество ответов на вопросы разное и выборку по guid-у вопроса не могу придумать.
Сложность в том,что guid вытаскивается как некий buffer,а при попытке перевода в str guid выглядит вот так : �r����L����i���

(для подтверждения существования guid-полей хотел сунуть картинку - не нашел как)



Офлайн

#5 Окт. 3, 2010 16:04:52

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

Как работать с guid записями sqlite?

Сам понимаю,что странно, но Sqlite Administrator выдает тип поля GUID. А разработчика не найти. Конвертнуть что-ли…



Офлайн

#6 Окт. 3, 2010 16:26:31

Lexander
От:
Зарегистрирован: 2008-09-19
Сообщения: 1139
Репутация: +  33  -
Профиль   Отправить e-mail  

Как работать с guid записями sqlite?

Что выводит, если запрос делать из Sqlite Administrator?
Кстати, разработчик допустил досадный промах, использование GUID в качестве ключа - плохое решение.



Офлайн

#7 Окт. 3, 2010 17:31:19

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

Как работать с guid записями sqlite?

Какой именно запрос делать из SqlAdministratora?
Ну тут я попробую его найти, но только с целью попинать если :)



Офлайн

#8 Окт. 3, 2010 20:29:52

Lexander
От:
Зарегистрирован: 2008-09-19
Сообщения: 1139
Репутация: +  33  -
Профиль   Отправить e-mail  

Как работать с guid записями sqlite?

Любой запрос, включающий вывод поля с GUID.
Есть ли разница между результатом в Sqlite Administrator и в том, что выводит питон?



Офлайн

#9 Окт. 3, 2010 20:55:41

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

Как работать с guid записями sqlite?

Выдаётся одно и то же. Но совет помог:

c1.execute("select guid from table")
guid=c1.fetchone()[0]
с2.execute("SELECT * FROM table WHERE guid=?", guid) - работает
А конкатенацией не катит.

Спасибо, Lexander



Офлайн

Board footer

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

Powered by DjangoBB

Lo-Fi Version