Con4445 jesus
Upcoming SlideShare
Loading in...5
×
 

Con4445 jesus

on

  • 387 views

 

Statistics

Views

Total Views
387
Views on SlideShare
387
Embed Views
0

Actions

Likes
1
Downloads
4
Comments
0

0 Embeds 0

No embeds

Accessibility

Categories

Upload Details

Uploaded via as Adobe PDF

Usage Rights

© All Rights Reserved

Report content

Flagged as inappropriate Flag as inappropriate
Flag as inappropriate

Select your reason for flagging this presentation as inappropriate.

Cancel
  • Full Name Full Name Comment goes here.
    Are you sure you want to
    Your message goes here
    Processing…
Post Comment
Edit your comment

    Con4445 jesus Con4445 jesus Presentation Transcript

    • 1 Copyright © 2013, Oracle and/or its affiliates. All rights reserved.
    • Developing with MySQL Connector/Python Dr. Paulo Jesus Software Developer 2 Copyright © 2013, Oracle and/or its affiliates. All rights reserved.
    • Program Agenda  Introduction of Connector/Python  Download and Installation  Coding  About Performance  Frameworks and Applications 3 Copyright © 2013, Oracle and/or its affiliates. All rights reserved.
    • Introduction 4 Copyright © 2013, Oracle and/or its affiliates. All rights reserved.
    • Introducing MySQL Connector/Python  MySQL Database Driver  Pure Python, no 3rd party dependencies  Python v2 and v3  For MySQL, by MySQL  Documentation – http://dev.mysql.com/doc/connector-python/en/index.html 5 Copyright © 2013, Oracle and/or its affiliates. All rights reserved.
    • Pure Python  Written entirely using Python  No compiling against MySQL client libraries  Only Standard Library used  Developed for Python v2 and v3  PEP-249 compliant 6 Copyright © 2013, Oracle and/or its affiliates. All rights reserved.
    • Current Connector/Python Versions  v1.0 – GA since September 2012 – v1.0.12 released August 2013  v1.1 – Alpha since June 2013 – Some new features:  Prepared Statements and Pooling  Django backend included 7 Copyright © 2013, Oracle and/or its affiliates. All rights reserved.
    • Python Support Overview of supported Python version 2.4 2.5 2.6 2.7 3.0 3.1 3.2 3.3 v1.0 ? ?       v1.1         Connector/Python 8 Copyright © 2013, Oracle and/or its affiliates. All rights reserved.
    • MySQL Server Support  MySQL v5.5 and higher  Known to work on earlier versions – No old password hashing support – MySQL v4.0 and older will not work 9 Copyright © 2013, Oracle and/or its affiliates. All rights reserved.
    • Download & Installation 10 Copyright © 2013, Oracle and/or its affiliates. All rights reserved.
    • Dependencies Python!  For Windows – Install Python from http://python.org  Other systems – should have Python (2.6 or greater) 11 Copyright © 2013, Oracle and/or its affiliates. All rights reserved.
    • Download  MySQL Website – http://dev.mysql.com/downloads/connector/python  Available as – TAR/ZIP archive – RPM and Debian package – Windows Installer (MSI)  Launchpad – https://launchpad.net/myconnpy 12 Copyright © 2013, Oracle and/or its affiliates. All rights reserved.
    • Download  Example file names: – mysql-connector-python-1.1.1.zip – mysql-connector-python-1.1.1-py2.7.msi – mysql-connector-python-1.1.1.el6.noarch.rpm  Architecture independent 13 Copyright © 2013, Oracle and/or its affiliates. All rights reserved.
    • Installation: Using TAR/ZIP Running setup.py  Most common way  Works anywhere – .. where Python is installed  For both Python v2 & v3 14 Copyright © 2013, Oracle and/or its affiliates. All rights reserved.
    • Installation: Universal Using setup.py shell> unzip mysql-connector-1.0.12.zip shell> cd mysql-connector-1.0.12 shell> python setup.py install # Or any other Python binary shell> /opt/python/3.3/bin/python3 setup.py install 15 Copyright © 2013, Oracle and/or its affiliates. All rights reserved.
    • Installation using RPM and Debian package # On Oracle Linux shell> rpm -i mysql-connector-python-1.1.1.el6.noarch.rpm # On Ubuntu shell> dpkg -i mysql-connector-python_1.0.12-1ubuntu12.04_all.deb 16 Copyright © 2013, Oracle and/or its affiliates. All rights reserved.
    • Installation: using PyPI Python Package Index shell> easy_install mysql-connector-python or shell> pip install mysql-connector-python 17 Copyright © 2013, Oracle and/or its affiliates. All rights reserved.
    • Install Inside Virtual Environment Useful for testing and new development # If not installed yet shell> pip install virtualenv shell> virtualenv ENV shell> source ENV/bin/activate shell> pip install mysql-connector-python 18 Copyright © 2013, Oracle and/or its affiliates. All rights reserved.
    • Coding 19 Copyright © 2013, Oracle and/or its affiliates. All rights reserved.
    • Classes and Objects mysql.connector module  import mysql.connector  mysql.connector.connect() – accepts numerous arguments – returns a MySQLConnection 20 Copyright © 2013, Oracle and/or its affiliates. All rights reserved.
    • Classes and Objects MySQLConnection  MySQLConnection – connects with MySQL – retrieve server information – reconfigure and reconnect – commit/rollback transactions – create MySQLCursor objects 21 Copyright © 2013, Oracle and/or its affiliates. All rights reserved.
    • Classes and Objects MySQLCursor  MySQLCursor – fetch & manipulate data – transactions – different flavors (buffered, raw) 22 Copyright © 2013, Oracle and/or its affiliates. All rights reserved.
    • Connecting with MySQL Basic connection import mysql.connector cnx = mysql.connector.connect(user='root', host='prod.example.com') print(cnx.connection_id) cnx.close() 23 Copyright © 2013, Oracle and/or its affiliates. All rights reserved.
    • Connecting with MySQL Use a dict to hold configuration & use IPv6 CONFIG = { 'user': 'root', 'host': '::1', } cnx = mysql.connector.connect(**CONFIG) print(cnx.connection_id) cnx.close() 24 Copyright © 2013, Oracle and/or its affiliates. All rights reserved.
    • Reconnecting with MySQL Reconfigure and reconnect cnx = mysql.connector.connect(**CONFIG) cnx.config(user='joe', password='mysecret') cnx.reconnect() cnx.close() 25 Copyright © 2013, Oracle and/or its affiliates. All rights reserved.
    • Cursor methods MySQLCursor class  execute(query, data) – data is list of values  fetchone() – returns row as tuple  fetchmany(20) – Get the next 20 rows (or less) as list of tuples  fetchall() – Get all, or remaining, as list of tuples 26 Copyright © 2013, Oracle and/or its affiliates. All rights reserved.
    • Fetching Data Fetch a row cur = cnx.cursor() cur.execute("SELECT NOW()") result= cur.fetchone()[0] print(result) cur.close() # Result (datetime.datetime(2013, 9, 2, 10, 41, 58)) 27 Copyright © 2013, Oracle and/or its affiliates. All rights reserved.
    • Fetching Data Going through results using iterator query = ( "SELECT id, last_name FROM employees " "WHERE id > %s AND first_name LIKE %s" ) cur.execute(query, (500, 'J%')) for row in cur: print("{id} {name}".format(id=row[0], name=row[1])) 28 Copyright © 2013, Oracle and/or its affiliates. All rights reserved.
    • Manipulating data Inserting, updating and deleting insert_stmt = ( "INSERT INTO employees (first_name, last_name) " "VALUES (%s, %s) ) cur = cnx.cursor() cur.execute(insert_stmt, ('John', 'Doe')) print("ID of new employee: {id}".format(id=cur.lastrowid)) cnx.commit() 29 Copyright © 2013, Oracle and/or its affiliates. All rights reserved.
    • Change Many Records MySQLCursor.executemany() data = [ ('John', 'Doe'), ('Jane', 'Doe'), ] cur.executemany(insert_stmt, data) cnx.commit() 30 Copyright © 2013, Oracle and/or its affiliates. All rights reserved.
    • Execute Multiple Statements  Separated by semicolon ;  Could return one or more results  Example: – "SELECT NOW(); SELECT CURRENT_USER()"  Needs multi argument set to True – Raises error if not – cur.execute(query, multi=True) 31 Copyright © 2013, Oracle and/or its affiliates. All rights reserved.
    • Executing Multiple Statements Example cur = cnx.cursor() queries = "SELECT NOW(); SELECT CURRENT_USER()" for mcur in cur.execute(query, multi=True): if mcur.with_rows: print(mcur.fetchall()) 32 Copyright © 2013, Oracle and/or its affiliates. All rights reserved.
    • Retrying a Transaction (1/2) Using reconnect() tries = 10 while tries: tries -= 1 try: if not cnx.is_connected(): cnx.reconnect() cur = cnx.cursor() cur.execute(insert, ('Joe',)) 33 Copyright © 2013, Oracle and/or its affiliates. All rights reserved.
    • Retrying a Transaction (2/2) Using reconnect() cur.execute(insert, ('Joe',)) except mysql.connector.Error as err: if not tries: raise else: cnx.commit() break 34 Copyright © 2013, Oracle and/or its affiliates. All rights reserved.
    • Some Performance Tips 35 Copyright © 2013, Oracle and/or its affiliates. All rights reserved.
    • Push Work to Server General tips  Use MySQL functions – Date/Time calculation, – String operations, etc..  Sorting using ORDER BY in queries  Select what you need – Don't SELECT * 36 Copyright © 2013, Oracle and/or its affiliates. All rights reserved.
    • Push Work to Server: Example Date calculation done by MySQL server query = "SELECT DATEDIFF( end, start) FROM events WHERE id = %s" cur.execute(query, (1234,)) event_length = cur.fetchone()[0] 37 Copyright © 2013, Oracle and/or its affiliates. All rights reserved.
    • Raw Data  Use a raw cursor – cnx.cursor(raw=True)  No MySQL to Python conversion – data are all strings  It is faster in most cases – dumping to CSV or create XML – handle conversion elsewhere 38 Copyright © 2013, Oracle and/or its affiliates. All rights reserved.
    • Bulk Load Using CSV  Use LOAD DATA LOCAL INFILE  Server configuration has to allow it – local_infile=1  Client flag has to be set 39 Copyright © 2013, Oracle and/or its affiliates. All rights reserved.
    • Using LOAD DATA LOCAL INFILE CONFIG = { 'user': 'root', 'host': 'fk.example.com', 'client_flags': [mysql.connector.ClientFlag.LOCAL_FILES] } sql = "LOAD DATA LOCAL INFILE %s INTO TABLE employees" cur.execute(sql, ('employees.csv',)) 40 Copyright © 2013, Oracle and/or its affiliates. All rights reserved.
    • Frameworks and Applications 41 Copyright © 2013, Oracle and/or its affiliates. All rights reserved.
    • MySQL Projects Depending on Connector/Python  MySQL Utilities – Command line utilities – Managing, dumping data, failover, ..  MySQL Fabric – Data distribution – High-availability for groups of MySQL servers  Both pure Python & no 3rd party modules 42 Copyright © 2013, Oracle and/or its affiliates. All rights reserved.
    • SQLAlchemy  SQL Toolkit and ORM (Object Relational Mapper)  Pythonic database access  Used by lots of other (web) frameworks  Connector/Python dialect included – Since SQLAlchemy 0.6 43 Copyright © 2013, Oracle and/or its affiliates. All rights reserved.
    • SQLAlchemy: Usage Connect String from sqlalchemy import create_engine DB_URI = "mysql+mysqlconnector://{user}:{pwd}@{host}:{port}/{db}" engine = create_engine(DB_URI.format( user='joe', pwd='mysecret', db='employees', host='127.0.0.1', port=3306) ) 44 Copyright © 2013, Oracle and/or its affiliates. All rights reserved.
    • Django  Web framework  ORM and database API  No support for Connector/Python  But Connector/Python 1.1.1 supports Django – Support features as microsecond precision – Works with Django 1.4 and 1.5 – Python 3 support 45 Copyright © 2013, Oracle and/or its affiliates. All rights reserved.
    • Django: Configuration Using Connector/Python backend # settings.py DATABASES = { 'default': { 'ENGINE': 'mysql.connector.django', } } 46 Copyright © 2013, Oracle and/or its affiliates. All rights reserved.
    • Q&A 47 Copyright © 2013, Oracle and/or its affiliates. All rights reserved.
    • Q&A More Information  Documentation & Examples – http://dev.mysql.com/doc/connector-python/en/index.html  Download – http://dev.mysql.com/downloads/connector/python/#downloads  Blog – http://geert.vanderkelen.org  Feedback & Forum – http://forums.mysql.com/list.php?50 – http://bugs.mysql.com/ 48 Copyright © 2013, Oracle and/or its affiliates. All rights reserved.
    • Graphic Section Divider 49 Copyright © 2013, Oracle and/or its affiliates. All rights reserved.
    • 50 Copyright © 2013, Oracle and/or its affiliates. All rights reserved.