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=connect('scott/tiger@xe')
|
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
|
conn.commit() (required)
|
conn.commit() (required)
|
conn.commit() (required)
|
conn.commit() (required)
|
Подключение к 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()