Your SlideShare is downloading. ×
0
Con4445 jesus
Con4445 jesus
Con4445 jesus
Con4445 jesus
Con4445 jesus
Con4445 jesus
Con4445 jesus
Con4445 jesus
Con4445 jesus
Con4445 jesus
Con4445 jesus
Con4445 jesus
Con4445 jesus
Con4445 jesus
Con4445 jesus
Con4445 jesus
Con4445 jesus
Con4445 jesus
Con4445 jesus
Con4445 jesus
Con4445 jesus
Con4445 jesus
Con4445 jesus
Con4445 jesus
Con4445 jesus
Con4445 jesus
Con4445 jesus
Con4445 jesus
Con4445 jesus
Con4445 jesus
Con4445 jesus
Con4445 jesus
Con4445 jesus
Con4445 jesus
Con4445 jesus
Con4445 jesus
Con4445 jesus
Con4445 jesus
Con4445 jesus
Con4445 jesus
Con4445 jesus
Con4445 jesus
Con4445 jesus
Con4445 jesus
Con4445 jesus
Con4445 jesus
Con4445 jesus
Con4445 jesus
Con4445 jesus
Con4445 jesus
Upcoming SlideShare
Loading in...5
×

Thanks for flagging this SlideShare!

Oops! An error has occurred.

×
Saving this for later? Get the SlideShare app to save on your phone or tablet. Read anywhere, anytime – even offline.
Text the download link to your phone
Standard text messaging rates apply

Con4445 jesus

260

Published on

Published in: Technology
0 Comments
1 Like
Statistics
Notes
  • Be the first to comment

No Downloads
Views
Total Views
260
On Slideshare
0
From Embeds
0
Number of Embeds
0
Actions
Shares
0
Downloads
5
Comments
0
Likes
1
Embeds 0
No embeds

Report content
Flagged as inappropriate Flag as inappropriate
Flag as inappropriate

Select your reason for flagging this presentation as inappropriate.

Cancel
No notes for slide

Transcript

  • 1. 1 Copyright © 2013, Oracle and/or its affiliates. All rights reserved.
  • 2. Developing with MySQL Connector/Python Dr. Paulo Jesus Software Developer 2 Copyright © 2013, Oracle and/or its affiliates. All rights reserved.
  • 3. 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.
  • 4. Introduction 4 Copyright © 2013, Oracle and/or its affiliates. All rights reserved.
  • 5. 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.
  • 6. 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.
  • 7. 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.
  • 8. 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.
  • 9. 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.
  • 10. Download & Installation 10 Copyright © 2013, Oracle and/or its affiliates. All rights reserved.
  • 11. 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.
  • 12. 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.
  • 13. 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.
  • 14. 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.
  • 15. 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.
  • 16. 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.
  • 17. 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.
  • 18. 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.
  • 19. Coding 19 Copyright © 2013, Oracle and/or its affiliates. All rights reserved.
  • 20. 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.
  • 21. 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.
  • 22. Classes and Objects MySQLCursor  MySQLCursor – fetch & manipulate data – transactions – different flavors (buffered, raw) 22 Copyright © 2013, Oracle and/or its affiliates. All rights reserved.
  • 23. 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.
  • 24. 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.
  • 25. 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.
  • 26. 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.
  • 27. 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.
  • 28. 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.
  • 29. 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.
  • 30. 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.
  • 31. 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.
  • 32. 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.
  • 33. 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.
  • 34. 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.
  • 35. Some Performance Tips 35 Copyright © 2013, Oracle and/or its affiliates. All rights reserved.
  • 36. 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.
  • 37. 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.
  • 38. 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.
  • 39. 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.
  • 40. 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.
  • 41. Frameworks and Applications 41 Copyright © 2013, Oracle and/or its affiliates. All rights reserved.
  • 42. 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.
  • 43. 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.
  • 44. 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.
  • 45. 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.
  • 46. 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.
  • 47. Q&A 47 Copyright © 2013, Oracle and/or its affiliates. All rights reserved.
  • 48. 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.
  • 49. Graphic Section Divider 49 Copyright © 2013, Oracle and/or its affiliates. All rights reserved.
  • 50. 50 Copyright © 2013, Oracle and/or its affiliates. All rights reserved.

×