Найти - Пользователи
Полная версия: Как работать с guid записями sqlite?
Начало » Базы данных » Как работать с guid записями sqlite?
1
Hohland
Есть база, написанная кем-то для .net и там повcюду завязано на guid.
При этом питон вытаскивает эти ячейки как некий тип buffer. Насильственное приведение str(…) результатов не даёт.
Как полечить? Я бы бросил эту затею на фиг, но дальше запрос с “where guid=…” делать и вот там обламываюсь окончательно.
Андрей Светлов
Можете привести кусочек кода? Не знал, что sqlite поддерживает GUID напрямую.
Насколько помню - поддерживаемые типы NULL, INTEGER, REAL, TEXT, BLOB.
К тому же в запросе можно указать .execute(“SELECT * FROM table WHERE guid=?”, guid)
Lexander
Андрей Светлов
Можете привести кусочек кода? Не знал, что sqlite поддерживает GUID напрямую.
Не поддерживает. В ADO.NET есть врепер, который прозрачно для разработчика делает приведение типов.
Код простой: CREATE TABLE EXAMPLE (myguid GUID NOT NULL).
Делается преобразование к бинарному виду или текстовому в зависимости от настроек соединения. За это отвечает отдельный параметр.

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

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-полей хотел сунуть картинку - не нашел как)
Hohland
Сам понимаю,что странно, но Sqlite Administrator выдает тип поля GUID. А разработчика не найти. Конвертнуть что-ли…
Lexander
Что выводит, если запрос делать из Sqlite Administrator?
Кстати, разработчик допустил досадный промах, использование GUID в качестве ключа - плохое решение.
Hohland
Какой именно запрос делать из SqlAdministratora?
Ну тут я попробую его найти, но только с целью попинать если :)
Lexander
Любой запрос, включающий вывод поля с GUID.
Есть ли разница между результатом в Sqlite Administrator и в том, что выводит питон?
Hohland
Выдаётся одно и то же. Но совет помог:
c1.execute("select guid from table")
guid=c1.fetchone()[0]
с2.execute("SELECT * FROM table WHERE guid=?", guid) - работает
А конкатенацией не катит.

Спасибо, Lexander
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