PythonでDB接続

(8.0.22)
接続元:CentOS7
接続先:CentOS7

https://qiita.com/valzer0/items/2f27ba98397fa7ff0d74
https://basicincome30.com/python3-mysql-connector


-- 1. 環境設定

-- 1.1. mysql-connector-pythonのインストール
yum update
yum install python3 python3-devel mysql-devel gcc
pip3 install mysql-connector-python

-- 2. テストテーブル作成

drop table tab1;
create table tab1(col1 int,col2 varchar(10),col3 timestamp);
insert into tab1 values(1,'A',current_timestamp());
insert into tab1 values(2,'B',current_timestamp());
select * from tab1;

-- 3. DB接続確認

vim a.py

---
import mysql.connector

conn = mysql.connector.connect(host="mmm066" ,port="3306" ,database="test" ,user="test" ,password="test")

print ("---- select(バインド変数有) ---- ")
cur = conn.cursor()
cur.execute("select * from tab1 where col1 >= %s",(1,))
for row in cur:
print(row[0],"\t",row[1],"\t",row[2])
print ("---- ")
cur.execute("select * from tab1 where col1 >= %s",(2,))
for row in cur:
print(row[0],"\t",row[1],"\t",row[2])
cur.close()

print ("---- select(バインド変数なし) ---- ")
cur = conn.cursor()
cur.execute("select * from tab1 where col1 >= 1")
for row in cur:
print(row[0],"\t",row[1],"\t",row[2])
cur.close()

print ("---- insert(バインド変数有) ---- ")
cur = conn.cursor()
cur.execute("insert into tab1(col1,col2,col3) values(%s,%s,%s)",(100,"X","2021/01/01"))
conn.commit()
print(f"ret = {cur.rowcount}")
cur.close()

print ("---- insert(バインド変数なし) ---- ")
cur = conn.cursor()
cur.execute("insert into tab1(col1,col2,col3) values(200,'Y','2022/01/01')")
conn.commit()
print(f"ret = {cur.rowcount}")
cur.close()

conn.close()

---

python3 a.py

 

(19c)
接続元:CentOS7
接続先:CentOS7

https://qiita.com/kngsym2018/items/04514d623248a070adee
http://www.denzow.me/entry/2017/12/02/180320
https://qiita.com/nakaie/items/2c5a4b5d8b2ed77d843f


-- 1. 環境設定
-- 1.1. Oracle Instant Clientのダウンロードとインストール

rpm -ivh oracle-instantclient19.9-basic-19.9.0.0.0-1.x86_64.rpm
rpm -ivh oracle-instantclient19.9-devel-19.9.0.0.0-1.x86_64.rpm
rpm -ivh oracle-instantclient19.9-sqlplus-19.9.0.0.0-1.x86_64.rpm

-- 1.2. cx_Oracleのインストール
yum update
yum install python3
pip3 install cx_oracle


-- 2. テストテーブル作成

drop table tab1 purge;
create table tab1(col1 int,col2 varchar2(10),col3 timestamp);
insert into tab1 values(1,'A',sysdate);
insert into tab1 values(2,'B',sysdate);
commit;
select * from tab1;


-- 3. DB接続確認

vim a.py

---
import cx_Oracle
conn = cx_Oracle.connect(user='test', password='test', dsn='mmm065:1521/pdb1.example.com')

print ("---- select(バインド変数有) ---- ")
cur = conn.cursor()
cur.prepare("select * from tab1 where col1 >= :col1")
for row in cur.execute(None, {"col1":1}):
print(row[0],"\t",row[1],"\t",row[2])

print ("---- ")
for row in cur.execute(None, {"col1":2}):
print(row[0],"\t",row[1],"\t",row[2])

cur.close()

print ("---- select(バインド変数なし) ---- ")
cur = conn.cursor()
for row in cur.execute("select * from tab1 where col1 >= 1"):
print(row[0],"\t",row[1],"\t",row[2])

cur.close()

print ("---- insert(バインド変数有) ---- ")
cur = conn.cursor()
cur.prepare("insert into tab1(col1,col2,col3) values(:col1,:col2,:col3)")
cur.execute(None, {"col1":100,"col2":"X","col3":"2021/01/01"})
conn.commit()
print(f"ret = {cur.rowcount}")
cur.close()

print ("---- insert(バインド変数なし) ---- ")
cur = conn.cursor()
cur.execute("insert into tab1(col1,col2,col3) values(200,'Y','2022/01/01')")
conn.commit()
print(f"ret = {cur.rowcount}")
cur.close()

conn.close()

---

python3 a.py

 

(13)
接続元:CentOS7
接続先:CentOS8

https://www.ashisuto.co.jp/db_blog/article/20160308_postgresql_with_python.html
https://qiita.com/tom-sato/items/b5f1263911fdedd5e81b
https://qiita.com/hoto17296/items/0ca1569d6fa54c7c4732
https://www.psycopg.org/articles/2012/10/01/prepared-statements-psycopg/
https://www.yokoyan.net/entry/2018/10/12/183250
https://stackoverflow.com/questions/24441132/how-can-i-get-affected-row-count-from-psycopg2-connection-commit


※ドライバレベルでのprepare文はサポートされていない模様
※タプルの要素が1つでもカンマを付与する

-- 1. 環境設定
-- 1.1. psycopg2のインストール
yum update

yum install https://download.postgresql.org/pub/repos/yum/reporpms/EL-7-x86_64/pgdg-redhat-repo-latest.noarch.rpm
yum install epel-release centos-release-scl
yum install postgresql13-devel

yum install python3 python3-devel
yum install gcc

export PATH=$PATH:/usr/pgsql-13/bin
pip3 install psycopg2
python3 -c "import psycopg2"
echo $?


-- 2. テストテーブル作成

drop table tab1;
create table tab1(col1 int,col2 varchar(10),col3 timestamp);
insert into tab1 values(1,'A',clock_timestamp());
insert into tab1 values(2,'B',clock_timestamp());
select * from tab1;


-- 3. DB接続確認

vim a.py

---
import psycopg2
conn = psycopg2.connect("host=mmm067 port=5432 dbname=test user=postgres password=postgres")

print ("---- select(バインド変数有) ---- ")
cur = conn.cursor()
cur.execute("select * from tab1 where col1 >= %s",(1,))
for row in cur:
print(row[0],"\t",row[1],"\t",row[2])
print ("---- ")
cur.execute("select * from tab1 where col1 >= %s",(2,))
for row in cur:
print(row[0],"\t",row[1],"\t",row[2])
cur.close()

print ("---- select(バインド変数なし) ---- ")
cur = conn.cursor()
cur.execute("select * from tab1 where col1 >= 1")
for row in cur:
print(row[0],"\t",row[1],"\t",row[2])
cur.close()

print ("---- insert(バインド変数有) ---- ")
cur = conn.cursor()
cur.execute("insert into tab1(col1,col2,col3) values(%s,%s,%s)",(100,"X","2021/01/01"))
conn.commit()
print(f"ret = {cur.rowcount}")
cur.close()

print ("---- insert(バインド変数なし) ---- ")
cur = conn.cursor()
cur.execute("insert into tab1(col1,col2,col3) values(200,'Y','2022/01/01')")
conn.commit()
print(f"ret = {cur.rowcount}")
cur.close()

conn.close()

---

python3 a.py

(2019)
接続元:CentOS7
接続先:Windows Server 2016


https://docs.microsoft.com/ja-jp/sql/connect/python/pyodbc/step-3-proof-of-concept-connecting-to-sql-using-pyodbc?view=sql-server-ver15
https://github.com/mkleehammer/pyodbc/

-- 1. 環境設定

-- 1.1. UnixODBCのインストール

yum update -y
curl https://packages.microsoft.com/config/rhel/7/prod.repo > /etc/yum.repos.d/mssql-release.repo

yum remove unixODBC-utf16 unixODBC-utf16-devel
ACCEPT_EULA=Y yum install msodbcsql17
yum install unixODBC-devel


ls /usr/lib64/libodbc.so

-- 1.2. pyodbcのインストール

yum install python3 python3-devel gcc gcc-c++
pip3 install pyodbc
pip3 list


-- 2. テストテーブル作成

drop table tab1;
create table tab1(col1 int,col2 varchar(10),col3 datetime2);
insert into tab1 values(1,'A',getdate());
insert into tab1 values(2,'B',getdate());
select * from tab1;


-- 3. DB接続確認

vim a.py

---

import pyodbc

server = 'tcp:mmm064'
database = 'test'
username = 'sa'
password = 'Aaa!1234'

conn = pyodbc.connect('DRIVER={ODBC Driver 17 for SQL Server};SERVER='+server+';DATABASE='+database+';UID='+username+';PWD='+ password)
conn.autocommit = False

print ("---- select(バインド変数有) ---- ")
cur = conn.cursor()
for row in cur.execute("select * from tab1 where col1 >= ?",(1,)):
print(row[0],"\t",row[1],"\t",row[2])
print ("---- ")
for row in cur.execute("select * from tab1 where col1 >= ?",(2,)):
print(row[0],"\t",row[1],"\t",row[2])
cur.close()

print ("---- select(バインド変数なし) ---- ")
cur = conn.cursor()
for row in cur.execute("select * from tab1 where col1 >= 1"):
print(row[0],"\t",row[1],"\t",row[2])
cur.close()


print ("---- insert(バインド変数有) ---- ")
cur = conn.cursor()
cur.execute("insert into tab1(col1,col2,col3) values(?,?,?)",(100,"X","2021/01/01"))
conn.commit()
print(f"ret = {cur.rowcount}")
cur.close()

print ("---- insert(バインド変数なし) ---- ")
cur = conn.cursor()
cur.execute("insert into tab1(col1,col2,col3) values(200,'Y','2022/01/01')")
conn.commit()
print(f"ret = {cur.rowcount}")
cur.close()

conn.close()

 

---

python3 a.py