Форум сайта python.su
Есть база, написанная кем-то для .net и там повcюду завязано на guid.
При этом питон вытаскивает эти ячейки как некий тип buffer. Насильственное приведение str(…) результатов не даёт.
Как полечить? Я бы бросил эту затею на фиг, но дальше запрос с “where guid=…” делать и вот там обламываюсь окончательно.
Офлайн
Можете привести кусочек кода? Не знал, что sqlite поддерживает GUID напрямую.
Насколько помню - поддерживаемые типы NULL, INTEGER, REAL, TEXT, BLOB.
К тому же в запросе можно указать .execute(“SELECT * FROM table WHERE guid=?”, guid)
Офлайн
Андрей СветловНе поддерживает. В ADO.NET есть врепер, который прозрачно для разработчика делает приведение типов.
Можете привести кусочек кода? Не знал, что sqlite поддерживает GUID напрямую.
Офлайн
В одном месте обошел вот так:
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-полей хотел сунуть картинку - не нашел как)
Офлайн
Сам понимаю,что странно, но Sqlite Administrator выдает тип поля GUID. А разработчика не найти. Конвертнуть что-ли…
Офлайн
Что выводит, если запрос делать из Sqlite Administrator?
Кстати, разработчик допустил досадный промах, использование GUID в качестве ключа - плохое решение.
Офлайн
Какой именно запрос делать из SqlAdministratora?
Ну тут я попробую его найти, но только с целью попинать если :)
Офлайн
Любой запрос, включающий вывод поля с GUID.
Есть ли разница между результатом в Sqlite Administrator и в том, что выводит питон?
Офлайн
Выдаётся одно и то же. Но совет помог:
c1.execute("select guid from table")
guid=c1.fetchone()[0]
с2.execute("SELECT * FROM table WHERE guid=?", guid) - работает
Офлайн