Пытаюсь подключиться из 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),]
Вопрос: в чем ошибка?