Python + MySQL

Uit De Vliegende Brigade
Naar navigatie springen Naar zoeken springen
The printable version is no longer supported and may have rendering errors. Please update your browser bookmarks and please use the default browser print function instead.

MySQL-driver

Om vanuit Python met MySQL te communiceren, heb je een driver nodig. Zie hiervoor artikel MySQL driver (Python).

ORM

De standaard-manier om te interacteren met een MySQL-database vanuit Python, is door SQL-commando's in strings te stoppen, en deze te executeren. Een verschrikkelijke manier: Complex, foutgevoelig en vermoedelijk lastig te debuggen. De oplossing voor dit probleem heet ORM, oftewel object-relational mappings. Hierdoor kun je rechtstreeks Python-db-gerelateerde commando's gebruiken.

Inventaris

Keuze (okt. 2018)

  • SQLAlchemy - Lijkt de standaardoplossing te zijn.

Programmeervoorbeelden

Mijn eerste db-connectie - Zonder ORM

#! /usr/bin/python
#####################################################################################
#
import mysql.connector

cnx = mysql.connector.connect(
	user='xxx',
	password='yyy',
	host='127.0.0.1',
	database='zzz')

cursor = cnx.cursor()

cursor.execute("show databases;")
result=cursor.fetchall()
print result

cnx.close	

Uitvoer - In een nogal gaar format (zie hieronder!):

[(u'information_schema',), (u'zzz',), (u'mysql',), (u'performance_schema',)]

Tuple unpacking

Het gare format waarin data wordt weergegeven, is omdat ik samengestelde data (tuples?) als één object probeer weer te geven. De truuk is, om die data te splitsen [3]:

#! /usr/bin/python
#
# Bsp » Projecten - Actueel » P.'s importeren » XML-RPC » 06-py - Oct. 2018
# Talk to MySQL-database & fetch data > Example http://www.mysqltutorial.org/python-mysql-query/
#####################################################################################
#
#####################################################################################
# Load libraries
#####################################################################################
#
import mysql.connector

# from mysql.connector import MySQLConnection, Error   # Werkt niet + niet nodig
# from python_mysql_dbconfig import read_db_config     # Werkt niet + niet nodig
 
 
def query_with_fetchall():
    try:

        cnx = mysql.connector.connect(
            user='xxx',
            password='yyy',
            host='127.0.0.1',
            database='zzz')


        cursor = cnx.cursor()
        cursor.execute("SELECT * FROM practitioner_tmp")
        rows = cursor.fetchall()
 
        # Object "rows" contains all row data, as a tuple
        #################################################
        #
        print('Total Row(s):', cursor.rowcount)
        i=0
        for row in rows:

            i=i+1
            
            # Untuple
            ################################################
            #
            # https://stackoverflow.com/questions/25121829/mysql-query-returns-data-uexample
            #
            print(i),
            print(row)[0],  # Eerste veld
            print(row)[1],  # Etc.
            print(row)[2],
            print(row)[3]

    except Error as e:
        print(e)
 
    finally:
        cursor.close()
        cnx.close()
 
 
if __name__ == '__main__':
    query_with_fetchall()

Zie ook

Bronnen

ORM's

SQLAlchemy

Fetch data (Connector/Python API)