0
0

More than 1 year has passed since last update.

Ubuntu 18.04 + VsCode + Python3 + pyodbc(odbc-postgresql) から Posgtgres12 にアクセスしてみる

Last updated at Posted at 2020-06-24

目的

・Ubuntu 18.04 に odbc-postgresql をインストールする
・同じく pyodbc をインストールする
Ubuntu 18.04 + VsCode + Pytho3 + psycopg2(libpq-dev) から Posgtgres12 にアクセスしてみる
で作成した環境にアクセスしてみる
※Ubuntu はファイルが分割の粒度が小さいから、ファイル探すのにコツがいる感じ

pyodbcをインストールする


$ sudo pip3 install pyodbc
~
Installing collected packages: pyodbc
Successfully installed pyodbc-4.0.30

odbc-postgresqlをインストールする

対象パッケージを検索してみる


$ sudo apt search post | grep odbc
~
golang-github-lpabon-godbc-dev/bionic,bionic 1.0+git20140613.1.9577782-1 all
libcppdb-odbc0/bionic 0.3.1+dfsg-6 amd64
  SQL Connectivity Library (odbc backend)
libghc-hdbc-odbc-dev/bionic 2.3.1.1-8build3 amd64
libghc-hdbc-odbc-doc/bionic,bionic 2.3.1.1-8build3 all
libghc-hdbc-odbc-prof/bionic 2.3.1.1-8build3 amd64
odbc-postgresql/bionic-pgdg 1:12.02.0000-1.pgdg18.04+1 amd64
odbc-postgresql-dbgsym/bionic-pgdg 1:12.02.0000-1.pgdg18.04+1 amd64
  debug symbols for odbc-postgresql
r-cran-rodbc/bionic 1.3-15-1build1 amd64

Connect to PostgreSQL from Linux or Mac with ODBCより


$ sudo apt install odbc-postgresql
~
以下のパッケージが新たにインストールされます:
  odbc-postgresql
~  
odbc-postgresql:amd64 (1:12.02.0000-1.pgdg18.04+1) を展開しています...
odbc-postgresql:amd64 (1:12.02.0000-1.pgdg18.04+1) を設定しています ...
odbcinst: Driver installed. Usage count increased to 1. 
    Target directory is /etc
odbcinst: Driver installed. Usage count increased to 1. 
    Target directory is /etc

$ sudo ls /etc/*odbc*
/etc/odbc.ini  /etc/odbcinst.ini

$ sudo odbcinst -i -d -f /etc/odbc.ini
実行後 /etc/odbc.ini の内容 -> /etc/odbcinst.ini (?仕様をチェックしないと・・)

$ sudo odbcinst -i -d -f /etc/odbcinst.ini
を実行すると /etc/odbcinst.ini の内容がクリアされる(仕様なのか??)

$ sudo cat /etc/odbcinst.ini
~
[PostgreSQL ANSI]
Description=PostgreSQL ODBC driver (ANSI version)
Driver=psqlodbca.so
Setup=libodbcpsqlS.so
Debug=0
CommLog=1
UsageCount=1

[PostgreSQL Unicode]
Description=PostgreSQL ODBC driver (Unicode version)
Driver=psqlodbcw.so
Setup=libodbcpsqlS.so
Debug=0
CommLog=1
UsageCount=1

/etc/odbc.ini の編集

ODBCドライバのインストール先は


$ sudo find /usr/lib -name psqlodbcw.so
/usr/lib/x86_64-linux-gnu/odbc/psqlodbcw.so

$ sudo find /usr/lib -name libodbcpsqlS.so
現在は見えない・・
※/usr/lib/x86_64-linux-gnu/odbc/psqlodbcw.so

odbcinst1debian2_2.3.4-1.1ubuntu3_amd64.deb
には /usr/lib/x86_64-linux-gnu/odbc/libodbcpsqlS.so が記載されているのだが、インストールされていないのは謎??
※20.04 ではインストールされているので 様子見・・

/etc/odbc.ini に上記を追加後修正する


$ sudo cat /etc/odbc.ini
~
[PostgreSQL ANSI]
Description=PostgreSQL ODBC driver (ANSI version)
Driver=/usr/lib/x86_64-linux-gnu/odbc/psqlodbca.so
Setup=libodbcpsqlS.so
Debug=0
CommLog=1
UsageCount=1

[PostgreSQL Unicode]
Description=PostgreSQL ODBC driver (Unicode version)
Driver=/usr/lib/x86_64-linux-gnu/odbc/psqlodbcw.so
Setup=libodbcpsqlS.so
Debug=0
CommLog=1
UsageCount=1

odbc ドライバの有効化


$ sudo odbcinst -i -d -f /etc/odbc.ini
odbcinst: Driver installed. Usage count increased to 1.
    Target directory is /etc
odbcinst: Driver installed. Usage count increased to 1.
    Target directory is /etc
odbcinst: Driver installed. Usage count increased to 1.
    Target directory is /etc
### odbc ドライバのリストの表示
$ sudo odbcinst -q -d
[MSSQLDEMO]
[PostgreSQL ANSI]
[PostgreSQL Unicode]

### odbc ドライバのリストの無効化
$ sudo odbcinst -u -d -n MSSQLDEMO
$ sudo odbcinst -u -d -n 'PostgreSQL ANSI'
$ sudo odbcinst -u -d -n 'PostgreSQL Unicode'

Code RunnerでPython3をキックする場合の修正点

修正になったバージョンが不明なのだけど 1.46.1 の時点では以下の手順で修正する
・ファイル -> 基本設定 -> 設定
・検索ボックスに Code-runner:Executor Map を入力する


・setting.json で編集をクリックする
 ・修正前
    "code-runner.executorMap": {
    }
 ・修正後
    "code-runner.executorMap": {
        "python": "python3 -u"
    }

サンプルコード

# Windows Add env PYTHONIOENCODING = UTF-8 & restart vscode
# coding:utf-8

import pyodbc

server   = '192.168.5.49'
port = '5432' 
database = 'demo' 
username = 'demo' 
password = 'passwd' 
constr = 'DRIVER={PostgreSQL Unicode};SERVER=' + server + ';PORT=' + port + ';DATABASE=' + database + ';UID=' + username + ';PWD=' + password
conn = pyodbc.connect(constr)
# Create a cursor from the connection
cur = conn.cursor()

cur.execute("select count(*) from zipcode")
row = cur.fetchone()
if row:
    print(row)

cur.close()
conn.close()

参考にしたサイトはこちら

PostgreSQL データ ソースに接続する (SQL Server インポートおよびエクスポート ウィザード)
Ubuntu 18.04 で SQL Server2019 Express を試してみる
Ubuntu 18.04 + VsCode + Pytho3 + psycopg2(libpq-dev) から Posgtgres12 にアクセスしてみる
必要ライブラリがありません事案の救世主apt-file
Ubuntu 20.04 に Posgtgres をインストール後 C# + Npgsql でアクセスしてみる
Win10 + VsCode + Python3 + psycopg2 から Ubuntu 20.04 + Posgtgres12 にアクセスしてみる

0
0
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
0
0