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

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

## pyodbcをインストールする

<pre>
$ sudo pip3 install pyodbc
～
Installing collected packages: pyodbc
Successfully installed pyodbc-4.0.30
</pre>

## odbc-postgresqlをインストールする
対象パッケージを検索してみる

<pre>
$ 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
</pre>

[Connect to PostgreSQL from Linux or Mac with ODBC](https://help.interfaceware.com/v6/connect-to-postgresql-from-linux-or-mac-with-odbc)より

<pre>
$ 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
</pre>

### /etc/odbc.ini の編集
ODBCドライバのインストール先は

<pre>
$ 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
</pre>
※[odbcinst1debian2_2.3.4-1.1ubuntu3_amd64.deb](https://ubuntu.pkgs.org/18.04/ubuntu-main-amd64/odbcinst1debian2_2.3.4-1.1ubuntu3_amd64.deb.html)
には /usr/lib/x86_64-linux-gnu/odbc/libodbcpsqlS.so が記載されているのだが、インストールされていないのは謎？？
※20.04 ではインストールされているので 様子見・・

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

<pre>
$ 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
</pre>

### odbc ドライバの有効化

<pre>
$ 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'
</pre>

## Code RunnerでPython3をキックする場合の修正点
修正になったバージョンが不明なのだけど 1.46.1 の時点では以下の手順で修正する
・ファイル -> 基本設定 -> 設定
・検索ボックスに Code-runner:Executor Map を入力する
<pre>
・setting.json で編集をクリックする
 ・修正前
    "code-runner.executorMap": {
    }
 ・修正後
    "code-runner.executorMap": {
        "python": "python3 -u"
    }
</pre>

## サンプルコード

```python
# 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 インポートおよびエクスポート ウィザード)](https://docs.microsoft.com/ja-jp/sql/integration-services/import-export-data/connect-to-a-postgresql-data-source-sql-server-import-and-export-wizard?view=sql-server-ver15)
[Ubuntu 18.04 で SQL Server2019 Express を試してみる](https://qiita.com/tabizou/items/be059dbbc2817889592e)
[Ubuntu 18.04 + VsCode + Pytho3 + psycopg2(libpq-dev) から Posgtgres12 にアクセスしてみる](https://qiita.com/tabizou/items/efaa0a1da6c48c20a1f1)
[必要ライブラリがありません事案の救世主apt-file](https://qiita.com/hash/items/c145b09807b1188b0374)
[Ubuntu 20.04 に Posgtgres をインストール後 C# + Npgsql でアクセスしてみる](https://qiita.com/tabizou/items/47f395d7ab3030dd1915)
[Win10 + VsCode + Python3 + psycopg2 から Ubuntu 20.04 + Posgtgres12 にアクセスしてみる](https://qiita.com/tabizou/items/ff2255ec546e2d3e6e2e)