Pyodbc с BigQuery - PullRequest
       51

Pyodbc с BigQuery

0 голосов
/ 14 сентября 2018

Я пытаюсь заставить Pyodbc работать с Google BigQuery. Менеджер ODBC, который я установил, является unixodbc (Ubuntu) Конфигурация должна быть в порядке с драйверами Simba, так как команда SQL работает, и я могу выполнить запрос оттуда.

Однако при использовании Pyodbc я застрял. это код:

import pyodbc

dbname = 'testdb'
driver_str = '{Simba ODBC Driver for Google BigQuery 64-bit}'
cnxn = pyodbc.connect(driver=driver_str, database=dbname)

c = conn.cursor()
c.execute('SELECT * FROM tablename')
print(c.fetchone())

Выдает следующую ошибку:

Traceback (most recent call last):
  File "/home/virus/work/lutech/wind/usecase3/test_odbc.py", line 48, in <module>
    cnxn = pyodbc.connect(driver=driver_str, database=dbname)
pyodbc.OperationalError: ('08001', '[08001] [unixODBC][Simba][DSI] An error occurred while attempting to retrieve the error message for key \'UnableToEstConn\' and component ID 1: Could not open error message files - Check that "/home/virus/work/lutech/wind/simba/googlebigqueryodbc/lib/64/$(INSTALLDIR)/ErrorMessages/en-US/ODBCMessages.xml" or "/home/virus/work/lutech/wind/simba/googlebigqueryodbc/lib/64/$(INSTALLDIR)/ErrorMessages/ODBCMessages_en-US.xml" exists and are accessible. MessageParameters=["{[Catalog] [OAuthMechanism]}"] (-1) (SQLDriverConnect)')

Я не понимаю, что это значит, но это относится к файлу, который находится в папке Simba Error.

Любая помощь?

1 Ответ

0 голосов
/ 16 сентября 2018

Я решил, с очень интенсивным подходом try & error. Теперь это очень понятно. Я использовал локальные файлы конфигурации пользователя, чтобы избежать проблем с разрешениями. Те, что в / etc / пусты.

Это содержимое моего файла .odbcinst.ini:

$ cat .odbcinst.ini 

[ODBC Drivers]
Simba ODBC Driver for Google BigQuery 64-bit=Installed
[Simba ODBC Driver for Google BigQuery 64-bit]
Description=Simba ODBC Driver for Google BigQuery (64-bit)
Driver=<local user installation path>/simba/googlebigqueryodbc/lib/64/libgooglebigqueryodbc_sb64.so

и вот мой .odbc.ini:

$ cat .odbc.ini 

[bigquery_odbc]
Driver=Simba ODBC Driver for Google BigQuery 64-bit
Catalog=<gcp project id>
OAuthMechanism=0
Email= <email service account>
KeyFilePath=<path to the json file downloaded when creating the service account>

Здесь вы сможете успешно выполнить isql -v bigquery_odbc

Теперь, если я пытаюсь подключиться с помощью pyodbc, я получаю ошибку выше. Сначала исправьте путь установки, указанный в файле конфигурации, а также кодировку UTF, указанную здесь

$ cat <local user installation path>/simba/googlebigqueryodbc/lib/64/simba.googlebigqueryodbc.ini

# To use this INI file, replace $(INSTALLDIR) with the
# directory the tarball was extracted to.

[Driver]
DriverManagerEncoding=UTF-16

ErrorMessagesPath=<local user installation path>simba/googlebigqueryodbc/ErrorMessages
LogLevel=0
LogPath=<log path>
LogFileCount=5
LogFileSize=10

При вызове pyodbc он работал:

dataset_name = <bigquery dataset name>
DSN = 'bigquery_odbc'
conn_str = "DSN={}".format(DSN)
cnxn = pyodbc.connect(conn_str, autocommit=True) # DO NOT forget autocommit param
cursor = cnxn.cursor()
cursor.execute('select * from {}.table;'.format(dataset_name))
print(cursor.fetchone())

Я много боролся с этой конфигурацией. Надеюсь, что это помогает другим

...