Пытаюсь подключиться из python к БД на postgresql. Использую библиотеку libpq.so.5.10, подключенную через модуль ctypes. На данный момент получилось подключится к БД, получить от БД имя пользователя и рабочей базы данных, а также завершить соединение с помощью функций PQconnectdb, PQstatus, PQuser, PQdb и PQfinish. Следующий шаг - это попытка отправить запрос с помощью функции PQexec. Описание ее в документации (источник - https://postgrespro.ru/docs/postgresql/9.6/libpq-exec):
PQexecпри попытке ее использования выходит ошибка:
Передаёт команду серверу и ожидает результата.
PGresult *PQexec(PGconn *conn, const char *command);
Возвращает указатель на PGresult или, возможно, пустой указатель (null). Как правило, возвращается непустой указатель, исключением являются ситуации нехватки памяти или серьёзные ошибки, такие, как невозможность отправки команды серверу. Для проверки возвращаемого значения на наличие ошибок следует вызывать функцию PQresultStatus (в случае нулевого указателя она возвратит PGRES_FATAL_ERROR). Для получения дополнительной информации о таких ошибках используйте функцию PQerrorMessage.
Traceback (most recent call last):Хотя структура PGconn работает с выше приведенными функциями без ошибки. Сама структура описана мной как:
File “testlib.py”, line 38, in <module>
info = PQexec(PGconn, “SELECT * FROM test;”)
ctypes.ArgumentError: argument 1: <type ‘exceptions.TypeError’>: expected PGconn instance instead of _ctypes.PyCStructType
class PGconn(Structure): _fields_ = [("pg_conn_first_field", c_char_p),]
Вопрос: в чем ошибка?
. А так представтье, что я на необитаемом острове, у меня есть две доски и гвоздь, а также задача сооденить эти две доски гвоздем. Все знают, что лучший инструмент это молоток. Его можно купить в магазине или попросить у соседа. Но это необитаемый остров, здесь нет соседей и нет чертовых магазинов.