1. Устанавливаем Oracle Client
2. Выставляем переменные окружения
[angor@omega admin]$
export ORACLE_HOME=/u01/app/oracle/product/12.1.0/client_1
[angor@omega admin]$
export LD_LIBRARY_PATH=$ORACLE_HOME/lib:$LD_LIBRARY_PATH
[angor@omega admin]$
export PATH=$ORACLE_HOME/bin:$PATH
3. Устанавливаем cx_oracle
[angor@omega admin]$
sudo easy_install cx_oracle
4. Проверяем
[angor@omega ~]$
python
Python 3.4.1 (default, May 19 2014, 17:23:49)
[GCC 4.9.0 20140507 (prerelease)] on linux
Type "help", "copyright", "credits" or "license" for more information.
>>>
import cx_Oracle
>>>
import cx_Oracle
ip = '192.168.0.1'
port = 1521
SID = 'YOURSIDHERE'
dsn_tns = cx_Oracle.makedsn(ip, port, SID)
db = cx_Oracle.connect('username', 'password', dsn_tns)
import cx_Oracle
connstr = 'scott/tiger@server:1521/orcl'
conn = cx_Oracle.connect(connstr)
import cx_Oracle
CONN_INFO = {
'host': '192.168.0.1',
'port': 1521,
'user': 'user_name',
'psw': 'your_password',
'service': 'my_service',
}
CONN_STR = '{user}/{psw}@{host}:{port}/{service}'.format(**CONN_INFO)
connection = cx_Oracle.connect(CONN_STR)
import cx_Oracle
ip = '192.168.0.1'
port = 1521
service_name = 'my_service'
dsn = cx_Oracle.makedsn(ip, port, service_name=service_name)
db = cx_Oracle.connect('user', 'password', dsn)
import cx_Oracle
dsn = cx_Oracle.makedsn(host='127.0.0.1', port=1521, sid='your_sid')
conn = cx_Oracle.connect(user='angor', password='password', dsn=dsn)
conn.close()
import cx_Oracle
ip = '192.168.0.1'
port = 1524
SID = 'dev3'
dsn_tns = cx_Oracle.makedsn(ip, port, SID)
conn = cx_Oracle.connect('angor', 'pass', dsn_tns)
print conn.version
conn.close()
Пример:
test_ora.py
import sys
import getpass
import platform
import cx_Oracle
# Версии Python и модулей
print ("Python version: " + platform.python_version())
print ("cx_Oracle version: " + cx_Oracle.version)
print ("Oracle client: " + str(cx_Oracle.clientversion()).replace(', ','.'))
print ('-' * 90)
# Приконнектимся к Oracle
username = 'scott'
pwd = 'tiger'
database = 'testdb'
connection = cx_Oracle.connect(username, pwd, database)
# Или так:
#connection = cx_Oracle.connect('scott', 'tiger', 'testdb')
#connection = cx_Oracle.connect('scott/tiger@testdb')
# Некоторые атрибуты объекта connection:
print ("Oracle DB version: " + connection.version)
print ("Oracle client encoding: " + connection.encoding)
print ('-' * 90)
# Создадим курсор и выполним запрос к БД:
cursor = connection.cursor()
query = "select * from v$version"
cursor.execute(query)
rows = cursor.fetchall()
for row in rows:
print(row)
connection.close()
C:\project\py>test_ora.py
Python version: 3.5.1
cx_Oracle version: 5.2
Oracle client: (12.1.0.2.0)
------------------------------------------------------------------------------------------
Oracle DB version: 12.1.0.2.0
Oracle client encoding: WINDOWS-1252
------------------------------------------------------------------------------------------
('Oracle Database 12c Enterprise Edition Release 12.1.0.2.0 - 64bit Production', 0)
('PL/SQL Release 12.1.0.2.0 - Production', 0)
('CORE\t12.1.0.2.0\tProduction', 0)
('TNS for 64-bit Windows: Version 12.1.0.2.0 - Production', 0)
('NLSRTL Version 12.1.0.2.0 - Production', 0)
C:\project\py>
Ещё способы создания объектов соединений с БД Oracle:
import cx_Oracle
#lsnrctl servises
service = 'testdb.localdomain'
connection = cx_Oracle.connect('scott', 'tiger', 'localhost:1521/' + service)
connection = cx_Oracle.connect('scott/tiger@localhost:1521/' + service)
dsn_tns = cx_Oracle.makedsn('localhost', 1521, service).replace('SID','SERVICE_NAME')
print(dsn_tns)
(DESCRIPTION=(ADDRESS_LIST=(ADDRESS=(PROTOCOL=TCP)(HOST=localhost)(PORT=1521)))(CONNECT_DATA=(SERVICE_NAME=testdb.localdomain)))
connection = cx_Oracle.connect('scott', 'tiger', dsn_tns)
Пример создания таблицы:
DROP TABLE EMP;
CREATE TABLE EMP(
EMPNO NUMBER(4) NOT NULL,
ENAME VARCHAR2(10),
JOB VARCHAR2(9),
MGR NUMBER(4),
HIREDATE DATE,
SAL NUMBER(7, 2),
COMM NUMBER(7, 2),
DEPTNO NUMBER(2)
);
alter session set nls_date_format='DD-MON-YYYY';
alter session set nls_language=AMERICAN;
INSERT INTO EMP VALUES(7369, 'SMITH', 'CLERK', 7902,TO_DATE('17-DEC-1980', 'DD-MON-YYYY'), 800, NULL, 20);
INSERT INTO EMP VALUES(7499, 'ALLEN', 'SALESMAN', 7698,TO_DATE('20-FEB-1981', 'DD-MON-YYYY'), 1600, 300, 30);
INSERT INTO EMP VALUES(7521, 'WARD', 'SALESMAN', 7698,TO_DATE('22-FEB-1981', 'DD-MON-YYYY'), 1250, 500, 30);
INSERT INTO EMP VALUES(7566, 'JONES', 'MANAGER', 7839,TO_DATE('2-APR-1981', 'DD-MON-YYYY'), 2975, NULL, 20);
INSERT INTO EMP VALUES(7654, 'MARTIN', 'SALESMAN', 7698,TO_DATE('28-SEP-1981', 'DD-MON-YYYY'), 1250, 1400, 30);
INSERT INTO EMP VALUES(7698, 'BLAKE', 'MANAGER', 7839,TO_DATE('1-MAY-1981', 'DD-MON-YYYY'), 2850, NULL, 30);
INSERT INTO EMP VALUES(7782, 'CLARK', 'MANAGER', 7839,TO_DATE('9-JUN-1981', 'DD-MON-YYYY'), 2450, NULL, 10);
INSERT INTO EMP VALUES(7788, 'SCOTT', 'ANALYST', 7566,TO_DATE('09-DEC-1982', 'DD-MON-YYYY'), 3000, NULL, 20);
INSERT INTO EMP VALUES(7839, 'KING', 'PRESIDENT', NULL,TO_DATE('17-NOV-1981', 'DD-MON-YYYY'), 5000, NULL, 10);
INSERT INTO EMP VALUES(7844, 'TURNER', 'SALESMAN', 7698,TO_DATE('8-SEP-1981', 'DD-MON-YYYY'), 1500, 0, 30);
INSERT INTO EMP VALUES(7876, 'ADAMS', 'CLERK', 7788,TO_DATE('12-JAN-1983', 'DD-MON-YYYY'), 1100, NULL, 20);
INSERT INTO EMP VALUES(7900, 'JAMES', 'CLERK', 7698,TO_DATE('3-DEC-1981', 'DD-MON-YYYY'), 950, NULL, 30);
INSERT INTO EMP VALUES(7902, 'FORD', 'ANALYST', 7566,TO_DATE('3-DEC-1981', 'DD-MON-YYYY'), 3000, NULL, 20);
INSERT INTO EMP VALUES(7934, 'MILLER', 'CLERK', 7782,TO_DATE('23-JAN-1982', 'DD-MON-YYYY'), 1300, NULL, 10);
С использованием cx_Oracle:
import cx_Oracle
connection = cx_Oracle.connect('scott/tiger@testdb')
cursor = connection.cursor()
try:
cursor.execute("DROP TABLE EMP")
except:
print('Таблица не существует')
create_table = """
CREATE TABLE EMP(
EMPNO NUMBER(4) NOT NULL,
ENAME VARCHAR2(10),
JOB VARCHAR2(9),
MGR NUMBER(4),
HIREDATE DATE,
SAL NUMBER(7, 2),
COMM NUMBER(7, 2),
DEPTNO NUMBER(2))
"""
cursor.execute(create_table)
cursor.execute("alter session set nls_date_format='DD-MON-YYYY'")
cursor.execute("alter session set nls_language=AMERICAN")
cursor.execute("INSERT INTO EMP VALUES(7369, 'SMITH', 'CLERK', 7902,TO_DATE('17-DEC-1980', 'DD-MON-YYYY'), 800, NULL, 20)")
cursor.execute("INSERT INTO EMP VALUES(7499, 'ALLEN', 'SALESMAN', 7698,TO_DATE('20-FEB-1981', 'DD-MON-YYYY'), 1600, 300, 30)")
cursor.execute("INSERT INTO EMP VALUES(7521, 'WARD', 'SALESMAN', 7698,TO_DATE('22-FEB-1981', 'DD-MON-YYYY'), 1250, 500, 30)")
cursor.execute("INSERT INTO EMP VALUES(7566, 'JONES', 'MANAGER', 7839,TO_DATE('2-APR-1981', 'DD-MON-YYYY'), 2975, NULL, 20)")
cursor.execute("INSERT INTO EMP VALUES(7654, 'MARTIN', 'SALESMAN', 7698,TO_DATE('28-SEP-1981', 'DD-MON-YYYY'), 1250, 1400, 30)")
cursor.execute("INSERT INTO EMP VALUES(7698, 'BLAKE', 'MANAGER', 7839,TO_DATE('1-MAY-1981', 'DD-MON-YYYY'), 2850, NULL, 30)")
cursor.execute("INSERT INTO EMP VALUES(7782, 'CLARK', 'MANAGER', 7839,TO_DATE('9-JUN-1981', 'DD-MON-YYYY'), 2450, NULL, 10)")
cursor.execute("INSERT INTO EMP VALUES(7788, 'SCOTT', 'ANALYST', 7566,TO_DATE('09-DEC-1982', 'DD-MON-YYYY'), 3000, NULL, 20)")
cursor.execute("INSERT INTO EMP VALUES(7839, 'KING', 'PRESIDENT', NULL,TO_DATE('17-NOV-1981', 'DD-MON-YYYY'), 5000, NULL, 10)")
cursor.execute("INSERT INTO EMP VALUES(7844, 'TURNER', 'SALESMAN', 7698,TO_DATE('8-SEP-1981', 'DD-MON-YYYY'), 1500, 0, 30)")
cursor.execute("INSERT INTO EMP VALUES(7876, 'ADAMS', 'CLERK', 7788,TO_DATE('12-JAN-1983', 'DD-MON-YYYY'), 1100, NULL, 20)")
cursor.execute("INSERT INTO EMP VALUES(7900, 'JAMES', 'CLERK', 7698,TO_DATE('3-DEC-1981', 'DD-MON-YYYY'), 950, NULL, 30)")
cursor.execute("INSERT INTO EMP VALUES(7902, 'FORD', 'ANALYST', 7566,TO_DATE('3-DEC-1981', 'DD-MON-YYYY'), 3000, NULL, 20)")
cursor.execute("INSERT INTO EMP VALUES(7934, 'MILLER', 'CLERK', 7782,TO_DATE('23-JAN-1982', 'DD-MON-YYYY'), 1300, NULL, 10)")
connection.commit()
query = "select * from emp"
cursor.execute(query)
rows = cursor.fetchall()
for row in rows:
print(row)
print ('-' * 90)
query1 = "select empno, ename, to_char(hiredate,'dd.mm.yyyy hh24:mi:ss') from emp"
cursor.execute(query1)
rows = cursor.fetchall()
for row in rows:
print(row)
drop_table = "delete from emp"
cursor.execute(drop_table)
connection.commit()
cursor.execute(query)
rows = cursor.fetchall()
for row in rows:
print(row)
connection.close()
(7369, 'SMITH', 'CLERK', 7902, datetime.datetime(1980, 12, 17, 0, 0), 800.0, None, 20)
(7499, 'ALLEN', 'SALESMAN', 7698, datetime.datetime(1981, 2, 20, 0, 0), 1600.0, 300.0, 30)
(7521, 'WARD', 'SALESMAN', 7698, datetime.datetime(1981, 2, 22, 0, 0), 1250.0, 500.0, 30)
(7566, 'JONES', 'MANAGER', 7839, datetime.datetime(1981, 4, 2, 0, 0), 2975.0, None, 20)
(7654, 'MARTIN', 'SALESMAN', 7698, datetime.datetime(1981, 9, 28, 0, 0), 1250.0, 1400.0, 30)
(7698, 'BLAKE', 'MANAGER', 7839, datetime.datetime(1981, 5, 1, 0, 0), 2850.0, None, 30)
(7782, 'CLARK', 'MANAGER', 7839, datetime.datetime(1981, 6, 9, 0, 0), 2450.0, None, 10)
(7788, 'SCOTT', 'ANALYST', 7566, datetime.datetime(1982, 12, 9, 0, 0), 3000.0, None, 20)
(7839, 'KING', 'PRESIDENT', None, datetime.datetime(1981, 11, 17, 0, 0), 5000.0, None, 10)
(7844, 'TURNER', 'SALESMAN', 7698, datetime.datetime(1981, 9, 8, 0, 0), 1500.0, 0.0, 30)
(7876, 'ADAMS', 'CLERK', 7788, datetime.datetime(1983, 1, 12, 0, 0), 1100.0, None, 20)
(7900, 'JAMES', 'CLERK', 7698, datetime.datetime(1981, 12, 3, 0, 0), 950.0, None, 30)
(7902, 'FORD', 'ANALYST', 7566, datetime.datetime(1981, 12, 3, 0, 0), 3000.0, None, 20)
(7934, 'MILLER', 'CLERK', 7782, datetime.datetime(1982, 1, 23, 0, 0), 1300.0, None, 10)
------------------------------------------------------------------------------------------
(7369, 'SMITH', '17.12.1980 00:00:00')
(7499, 'ALLEN', '20.02.1981 00:00:00')
(7521, 'WARD', '22.02.1981 00:00:00')
(7566, 'JONES', '02.04.1981 00:00:00')
(7654, 'MARTIN', '28.09.1981 00:00:00')
(7698, 'BLAKE', '01.05.1981 00:00:00')
(7782, 'CLARK', '09.06.1981 00:00:00')
(7788, 'SCOTT', '09.12.1982 00:00:00')
(7839, 'KING', '17.11.1981 00:00:00')
(7844, 'TURNER', '08.09.1981 00:00:00')
(7876, 'ADAMS', '12.01.1983 00:00:00')
(7900, 'JAMES', '03.12.1981 00:00:00')
(7902, 'FORD', '03.12.1981 00:00:00')
(7934, 'MILLER', '23.01.1982 00:00:00')
Подключение к базам в цикле:
database.csv
sid;pwdsys;uconn;host
TESTDB;oracle;(DESCRIPTION=(ADDRESS=(PROTOCOL=TCP)(HOST=omega)(PORT=1521))(CONNECT_DATA=(SERVER=DEDICATED)(SERVICE_NAME=TESTDB_OMEGA)));omega
TESTDB;oracle;(DESCRIPTION=(ADDRESS=(PROTOCOL=TCP)(HOST=omega)(PORT=1521))(CONNECT_DATA=(SERVER=DEDICATED)(SERVICE_NAME=TESTDB_OMEGA)));omega
TESTDB;oracle;(DESCRIPTION=(ADDRESS=(PROTOCOL=TCP)(HOST=omega)(PORT=1521))(CONNECT_DATA=(SERVER=DEDICATED)(SERVICE_NAME=TESTDB_OMEGA)));omega
TESTDB;oracle;DESCRIPTION=(ADDRESS=(PROTOCOL=TCP)(HOST=omega)(PORT=1521))(CONNECT_DATA=(SERVER=DEDICATED)(SERVICE_NAME=TESTDB_OMEGA)));omega
TESTDB;oracle;(DESCRIPTION=(ADDRESS=(PROTOCOL=TCP)(HOST=omega)(PORT=1521))(CONNECT_DATA=(SERVER=DEDICATED)(SERVICE_NAME=TESTDB_OMEGA)));omega
import cx_Oracle
import pandas as pd
import numpy as np
data = pd.read_csv('database.csv', sep=';')
data_rows, data_columns = data.shape
for i in range(data_rows):
sid = data.loc[i,'sid']
pwd = data.loc[i,'pwdsys']
conn = data.loc[i,'uconn']
s = 'sys/'+pwd+'@'+conn
#print(s)
try:
ora_conn = cx_Oracle.connect(s, mode = cx_Oracle.SYSDBA)
cursor = ora_conn.cursor()
query = "select * from dual"
cursor.execute(query)
rows = cursor.fetchall()
for row in rows:
print(row)
except cx_Oracle.DatabaseError as e:
error, = e.args
if error.code == 1017:
print('Please check your credentials. {}'.format(e))
else:
print('Database connection error: {}'.format(e))
finally:
try:
cursor.close()
ora_conn.close()
except:
print('cx_Oracle.connect or db.cursor')
('X',)
('X',)
('X',)
Database connection error: ORA-12154: TNS:could not resolve the connect identifier specified
cx_Oracle.connect or db.cursor
('X',)
username = 'angor'
password = ''
dsn = 'localhost/pdborcl'
port = 1512
encoding = 'UTF-8'
import cx_Oracle
import config
sql = 'select customer_id, name ' \
'from customers ' \
'order by name'
try:
with cx_Oracle.connect(
config.username,
config.password,
config.dsn,
encoding=config.encoding) as connection:
#fetchone
with connection.cursor() as cursor:
cursor.execute(sql)
while True:
row = cursor.fetchone()
if row is None:
break
print(row)
except cx_Oracle.Error as error:
print(error)
#fetchall
with connection.cursor() as cursor:
# execute the SQL statement
cursor.execute(sql)
# fetch all rows
rows = cursor.fetchall()
if rows:
for row in rows:
print(row)
except cx_Oracle.Error as error:
print(error)
batch_size = 20
#fetchmany
with connection.cursor() as cursor:
# execute the SQL statement
cursor.execute(sql)
while True:
# fetch rows
rows = cursor.fetchmany(batch_size)
if not rows:
break
# display rows
for row in rows:
print(row)
except cx_Oracle.Error as error:
print(error)
Существует четыре типа больших объектов:
BLOB - Большой двоичный объект, используемый для хранения двоичных данных. cx_Oracle использует тип cx_Oracle.BLOB.
CLOB - Большой символьный объект, используемый для символьных строк в формате набора символов базы данных. cx_Oracle использует тип cx_Oracle.CLOB.
NCLOB - большой объект национального символа, используемый для символьных строк в формате набора национальных символов. cx_Oracle использует тип cx_Oracle.NCLOB.
BFILE - внешний двоичный файл, используемый для ссылки на файл, хранящийся в операционной системе хоста за пределами базы данных. cx_Oracle использует тип cx_Oracle.BFILE.
Большие объекты могут передаваться в Oracle Database и из нее.
Большие объекты длиной до 1 ГБ также могут обрабатываться непосредственно как строки или байты в cx_Oracle.
Это облегчает работу с большими объектами и дает значительные преимущества в производительности по сравнению с потоковой передачей.
Однако для этого требуется, чтобы все данные больших объектов присутствовали в памяти Python, что может быть невозможно.
Смотрите GitHub для примеров LOB.
Простая вставка больших объектов
Рассмотрим таблицу со столбцами CLOB и BLOB:
CREATE TABLE lob_tbl (
id NUMBER,
c CLOB,
b BLOB
);
С помощью cx_Oracle данные больших объектов могут быть вставлены в таблицу путем привязки строк или байтов по мере необходимости:
with open('example.txt', 'r') as f:
textdata = f.read()
with open('image.png', 'rb') as f:
imgdata = f.read()
cursor.execute("""
insert into lob_tbl (id, c, b)
values (:lobid, :clobdata, :blobdata)""",
lobid=10, clobdata=textdata, blobdata=imgdata)
Обратите внимание, что при таком подходе размер больших данных ограничен 1 ГБ.
Извлечение больших объектов в виде строк и байтов
CLOB и BLOB размером менее 1 ГБ могут запрашиваться из базы данных напрямую в виде строк и байтов.
Это может быть намного быстрее, чем потоковое.
Необходимо использовать Connection.outputtypehandler или Cursor.outputtypehandler, как показано в этом примере:
def OutputTypeHandler(cursor, name, defaultType, size, precision, scale):
if defaultType == cx_Oracle.CLOB:
return cursor.var(cx_Oracle.LONG_STRING, arraysize=cursor.arraysize)
if defaultType == cx_Oracle.BLOB:
return cursor.var(cx_Oracle.LONG_BINARY, arraysize=cursor.arraysize)
id_v = 1
textData = "Текстовые данные"
bytesData = b"Бинарные данные"
cursor.execute("insert into lob_tbl (id, c, b) values (:1, :2, :3)",
[id_v, textData, bytesData])
connection.outputtypehandler = OutputTypeHandler
cursor.execute("select c, b from lob_tbl where id = :1", [id_v])
clobData, blobData = cursor.fetchone()
print("CLOB length:", len(clobData))
print("CLOB data:", clobData)
print("BLOB length:", len(blobData))
print("BLOB data:", blobData)
Без обработчика типа вывода значения CLOB и BLOB извлекаются как объекты LOB.
Размер объекта LOB можно получить, вызвав LOB.size (), а данные можно прочитать, вызвав LOB.read ():
id_v = 1
textData = "Текстовые данные"
bytesData = b"Бинарные данные"
cursor.execute("insert into lob_tbl (id, c, b) values (:1, :2, :3)",
[id_v, textData, bytesData])
cursor.execute("select b, c from lob_tbl where id = :1", [id_v])
b, c = cursor.fetchone()
print("CLOB length:", c.size())
print("CLOB data:", c.read())
print("BLOB length:", b.size())
print("BLOB data:", b.read())
Этот подход дает те же результаты, что и в предыдущем примере, но он будет работать медленнее
потому что это требует большего количества обращений к базе данных Oracle и имеет более высокие издержки.
Читать большие BLOB объекты можно с помощью метода LOB.read().
Метод LOB.read() может вызываться повторно до тех пор,
пока не будут прочитаны все данные
cursor.execute("select b from lob_t where id = :1", [10])
blob, = cursor.fetchone()
offset = 1
numBytesInChunk = 65536
with open("image.png", "wb") as f:
while True:
data = blob.read(offset, numBytesInChunk)
if data:
f.write(data)
if len(data) < numBytesInChunk:
break
offset += len(data)
Записывать большие BLOB объекты можно с помощью метода BLOB.write():
id_v = 9
lob_v = cursor.var(cx_Oracle.BLOB)
cursor.execute("""
insert into lob_tbl (id, b)
values (:1, empty_blob())
returning b into :2""", [id_v, lob_v])
blob, = lob_v.getvalue()
offset = 1
numBytesInChunk = 65536
with open("image.png", "rb") as f:
while True:
data = f.read(numBytesInChunk)
if data:
blob.write(data, offset)
if len(data) < numBytesInChunk:
break
offset += len(data)
connection.commit()
Соответствие типов данных :
Oracle | cx_Oracle | Python |
VARCHAR2 NVARCHAR2 LONG | cx_Oracle.STRING | str |
CHAR | cx_Oracle.FIXED_CHAR |
NUMBER | cx_Oracle.NUMBER | int |
FLOAT | float |
DATE | cx_Oracle.DATETIME | datetime.datetime |
TIMESTAMP | cx_Oracle.TIMESTAMP |
CLOB | cx_Oracle.CLOB | cx_Oracle.LOB |
BLOB | cx_Oracle.BLOB |
Some quick syntax reminders for common tasks using DB-API2 modules.
task
|
postgresql
|
sqlite
|
MySQL
|
Oracle
|
ODBC
|
oursql
|
create database
|
createdb mydb
|
created automatically when opened with sqlite3
|
|
created with Oracle XE install
|
|
|
command-line tool
|
psql -d mydb
|
sqlite3 mydb.sqlite
|
mysql testdb
|
sqlplus scott/tiger
|
|
|
GUI tool
|
pgadmin3
|
|
mysql-admin
|
sqldeveloper
|
|
|
install module
|
easy_install psycopg2
|
included in Python 2.5 standard library
|
easy_install mysql-python or apt-get install python-mysqldb
|
easy_install cx_oracle (but see note)
|
|
|
import
|
from psycopg2 import *
|
from sqlite3 import *
|
from MySQLdb import *
|
from cx_Oracle import *
|
|
|
connect
|
conn = connect("dbname='testdb' user='me' host='localhost' password='mypassword'”)
|
conn = connect('mydb.sqlite') or conn=connect(':memory:')
|
conn = connect (host="localhost", db="testdb", user="me", passwd="mypassword")
|
|
conn = odbc.odbc('DBALIAS') or odbc.odbc('DBALIAS/USERNAME/PASSWORD')
|
|
get cursor
|
curs = conn.cursor()
|
curs = conn.cursor()
|
curs = conn.cursor()
|
curs = conn.cursor()
|
|
|
execute SELECT
|
curs.execute('SELECT * FROM tbl')
|
curs.execute('SELECT * FROM tbl')
|
curs.execute('SELECT * FROM tbl')
|
curs.execute('SELECT * FROM tbl')
|
|
|
fetch
|
curs.fetchone(); curs.fetchall(); curs.fetchmany()
|
curs.fetchone(); curs.fetchall(); curs.fetchmany()
|
curs.fetchone(); curs.fetchall(); curs.fetchmany()
|
curs.fetchone(); curs.fetchall(); curs.fetchmany(); for r in curs
|
|
|
use bind variables
|
curs.execute('SELECT * FROM tbl WHERE col = %(varnm)s', {'varnm':22})
|
curs.execute('SELECT * FROM tbl WHERE col = ?', [22])
|
curs.execute('SELECT * FROM tbl WHERE col = %s', [22])
|
curs.execute('SELECT * FROM tbl WHERE col = :varnm', {'varnm':22})
|
|
curs.execute('SELECT * FROM tbl WHERE col = ?', (22,))
|
commit
|
|
|
|
|
|
|
Подключение к MySQL
import mysql.connector
from mysql.connector import Error
def connect():
""" Connect to MySQL database """
try:
conn = mysql.connector.connect(host='192.168.0.1',
database='my_db',
user='angor',
password='my_pwd')
if conn.is_connected():
print('Connected to MySQL database')
except Error as e:
print(e)
finally:
conn.close()
if __name__ == '__main__':
connect()