Industriële fabricage
Industrieel internet der dingen | Industriële materialen | Onderhoud en reparatie van apparatuur | Industriële programmering |
home  MfgRobots >> Industriële fabricage >  >> Industrial programming >> Python

Python - Toegang tot MySQL-database

Vorige paginaVolgende pagina

De Python-standaard voor database-interfaces is de Python DB-API. De meeste Python-database-interfaces voldoen aan deze standaard.

U kunt de juiste database voor uw toepassing kiezen. Python Database API ondersteunt een breed scala aan databaseservers zoals −

  • GadFly
  • mSQL
  • MijnSQL
  • PostgreSQL
  • Microsoft SQL Server 2000
  • Informix
  • Interbase
  • Oracle
  • Sybase

Hier is de lijst met beschikbare Python-database-interfaces:Python-database-interfaces en API's. U moet een afzonderlijke DB API-module downloaden voor elke database die u wilt openen. Als u bijvoorbeeld zowel toegang nodig heeft tot een Oracle-database als een MySQL-database, moet u zowel de Oracle- als de MySQL-databasemodule downloaden.

De DB API biedt een minimale standaard voor het werken met databases die waar mogelijk Python-structuren en syntaxis gebruiken. Deze API bevat het volgende −

  • De API-module importeren.
  • Verbinding maken met de database.
  • SQL-instructies en opgeslagen procedures afgeven.
  • Verbinding verbreken

We zouden alle concepten leren met behulp van MySQL, dus laten we het hebben over de MySQLdb-module.

Wat is MySQLdb?

MySQLdb is een interface om vanuit Python verbinding te maken met een MySQL-databaseserver. Het implementeert de Python Database API v2.0 en is gebouwd bovenop de MySQL C API.

Hoe installeer ik MySQLdb?

Voordat u doorgaat, moet u ervoor zorgen dat MySQLdb op uw computer is geïnstalleerd. Typ gewoon het volgende in je Python-script en voer het uit −

#!/usr/bin/python

import MySQLdb

Als het het volgende resultaat oplevert, betekent dit dat de MySQLdb-module niet is geïnstalleerd −

Traceback (most recent call last):
   File "test.py", line 3, in <module>
      import MySQLdb
ImportError: No module named MySQLdb

Gebruik de volgende opdracht om de MySQLdb-module te installeren −

For Ubuntu, use the following command -
$ sudo apt-get install python-pip python-dev libmysqlclient-dev
For Fedora, use the following command -
$ sudo dnf install python python-devel mysql-devel redhat-rpm-config gcc
For Python command prompt, use the following command -
pip install MySQL-python

Opmerking − Zorg ervoor dat je root-rechten hebt om bovenstaande module te installeren.

Databaseverbinding

Controleer het volgende voordat u verbinding maakt met een MySQL-database −

  • U heeft een database TESTDB aangemaakt.

  • U heeft een tabel WERKNEMER gemaakt in TESTDB.

  • Deze tabel heeft velden FIRST_NAME, LAST_NAME, AGE, SEX en INCOME.

  • Gebruikers-ID "testuser" en wachtwoord "test123" zijn ingesteld om toegang te krijgen tot TESTDB.

  • Python-module MySQLdb is correct op uw computer geïnstalleerd.

  • Je hebt de MySQL-zelfstudie doorlopen om de basisprincipes van MySQL te begrijpen.

Voorbeeld

Hieronder volgt een voorbeeld van verbinding maken met de MySQL-database "TESTDB"

#!/usr/bin/python

import MySQLdb

# Open database connection
db = MySQLdb.connect("localhost","testuser","test123","TESTDB" )

# prepare a cursor object using cursor() method
cursor = db.cursor()

# execute SQL query using execute() method.
cursor.execute("SELECT VERSION()")

# Fetch a single row using fetchone() method.
data = cursor.fetchone()
print "Database version : %s " % data

# disconnect from server
db.close()

Terwijl dit script wordt uitgevoerd, produceert het het volgende resultaat op mijn Linux-machine.

Database version : 5.0.45

Als er een verbinding tot stand is gebracht met de gegevensbron, wordt een verbindingsobject geretourneerd en opgeslagen in db voor verder gebruik, anders db is ingesteld op Geen. Vervolgens db object wordt gebruikt om een ​​cursor . te maken object, dat op zijn beurt wordt gebruikt om SQL-query's uit te voeren. Ten slotte, voordat het uitkomt, zorgt het ervoor dat de databaseverbinding wordt gesloten en bronnen worden vrijgegeven.

Databasetabel maken

Zodra een databaseverbinding tot stand is gebracht, zijn we klaar om tabellen of records in de databasetabellen te maken met behulp van execute methode van de gemaakte cursor.

Voorbeeld

Laten we een databasetabel maken WERKNEMER −

#!/usr/bin/python

import MySQLdb

# Open database connection
db = MySQLdb.connect("localhost","testuser","test123","TESTDB" )

# prepare a cursor object using cursor() method
cursor = db.cursor()

# Drop table if it already exist using execute() method.
cursor.execute("DROP TABLE IF EXISTS EMPLOYEE")

# Create table as per requirement
sql = """CREATE TABLE EMPLOYEE (
         FIRST_NAME  CHAR(20) NOT NULL,
         LAST_NAME  CHAR(20),
         AGE INT,  
         SEX CHAR(1),
         INCOME FLOAT )"""

cursor.execute(sql)

# disconnect from server
db.close()

INSERT-bewerking

Het is vereist wanneer u uw records in een databasetabel wilt maken.

Voorbeeld

In het volgende voorbeeld wordt SQL INSERT . uitgevoerd statement om een ​​record aan te maken in de WERKNEMER-tabel −

#!/usr/bin/python

import MySQLdb

# Open database connection
db = MySQLdb.connect("localhost","testuser","test123","TESTDB" )

# prepare a cursor object using cursor() method
cursor = db.cursor()

# Prepare SQL query to INSERT a record into the database.
sql = """INSERT INTO EMPLOYEE(FIRST_NAME,
         LAST_NAME, AGE, SEX, INCOME)
         VALUES ('Mac', 'Mohan', 20, 'M', 2000)"""
try:
   # Execute the SQL command
   cursor.execute(sql)
   # Commit your changes in the database
   db.commit()
except:
   # Rollback in case there is any error
   db.rollback()

# disconnect from server
db.close()

Bovenstaand voorbeeld kan als volgt worden geschreven om dynamisch SQL-query's te maken −

#!/usr/bin/python

import MySQLdb

# Open database connection
db = MySQLdb.connect("localhost","testuser","test123","TESTDB" )

# prepare a cursor object using cursor() method
cursor = db.cursor()

# Prepare SQL query to INSERT a record into the database.
sql = "INSERT INTO EMPLOYEE(FIRST_NAME, \
       LAST_NAME, AGE, SEX, INCOME) \
       VALUES ('%s', '%s', '%d', '%c', '%d' )" % \
       ('Mac', 'Mohan', 20, 'M', 2000)
try:
   # Execute the SQL command
   cursor.execute(sql)
   # Commit your changes in the database
   db.commit()
except:
   # Rollback in case there is any error
   db.rollback()

# disconnect from server
db.close()

Voorbeeld

Het volgende codesegment is een andere vorm van uitvoering waarbij u parameters direct kunt doorgeven −

..................................
user_id = "test123"
password = "password"

con.execute('insert into Login values("%s", "%s")' % \
             (user_id, password))
..................................

LEES bewerking

LEZEN Bewerking op een database betekent om wat nuttige informatie uit de database op te halen.

Zodra onze databaseverbinding tot stand is gebracht, bent u klaar om een ​​zoekopdracht in deze database te maken. U kunt ofwel fetchone() . gebruiken methode om één record op te halen of fetchall() methode om meerdere waarden uit een databasetabel te halen.

  • fetchone() − Het haalt de volgende rij van een queryresultatenset op. Een resultatenset is een object dat wordt geretourneerd wanneer een cursorobject wordt gebruikt om een ​​tabel op te vragen.

  • fetchall() − Het haalt alle rijen op in een resultatenset. Als er al enkele rijen uit de resultatenset zijn geëxtraheerd, worden de resterende rijen uit de resultatenset opgehaald.

  • aantal rijen − Dit is een alleen-lezen attribuut en retourneert het aantal rijen dat werd beïnvloed door een execute()-methode.

Voorbeeld

De volgende procedure doorzoekt alle records van de WERKNEMER-tabel met een salaris van meer dan 1000 −

#!/usr/bin/python

import MySQLdb

# Open database connection
db = MySQLdb.connect("localhost","testuser","test123","TESTDB" )

# prepare a cursor object using cursor() method
cursor = db.cursor()

sql = "SELECT * FROM EMPLOYEE \
       WHERE INCOME > '%d'" % (1000)
try:
   # Execute the SQL command
   cursor.execute(sql)
   # Fetch all the rows in a list of lists.
   results = cursor.fetchall()
   for row in results:
      fname = row[0]
      lname = row[1]
      age = row[2]
      sex = row[3]
      income = row[4]
      # Now print fetched result
      print "fname=%s,lname=%s,age=%d,sex=%s,income=%d" % \
             (fname, lname, age, sex, income )
except:
   print "Error: unable to fecth data"

# disconnect from server
db.close()

Dit levert het volgende resultaat op −

fname=Mac, lname=Mohan, age=20, sex=M, income=2000

Bewerking bijwerken

UPDATE Bewerking op een database betekent het bijwerken van een of meer records die al beschikbaar zijn in de database.

De volgende procedure werkt alle records bij met SEX als 'M' . Hier verhogen we de AGE van alle mannen met een jaar.

Voorbeeld

#!/usr/bin/python

import MySQLdb

# Open database connection
db = MySQLdb.connect("localhost","testuser","test123","TESTDB" )

# prepare a cursor object using cursor() method
cursor = db.cursor()

# Prepare SQL query to UPDATE required records
sql = "UPDATE EMPLOYEE SET AGE = AGE + 1
                          WHERE SEX = '%c'" % ('M')
try:
   # Execute the SQL command
   cursor.execute(sql)
   # Commit your changes in the database
   db.commit()
except:
   # Rollback in case there is any error
   db.rollback()

# disconnect from server
db.close()

WISSEN-bewerking

DELETE-bewerking is vereist wanneer u enkele records uit uw database wilt verwijderen. Hieronder volgt de procedure voor het verwijderen van alle records van WERKNEMER met een LEEFTIJD van meer dan 20 −

Voorbeeld

#!/usr/bin/python

import MySQLdb

# Open database connection
db = MySQLdb.connect("localhost","testuser","test123","TESTDB" )

# prepare a cursor object using cursor() method
cursor = db.cursor()

# Prepare SQL query to DELETE required records
sql = "DELETE FROM EMPLOYEE WHERE AGE > '%d'" % (20)
try:
   # Execute the SQL command
   cursor.execute(sql)
   # Commit your changes in the database
   db.commit()
except:
   # Rollback in case there is any error
   db.rollback()

# disconnect from server
db.close()

Transacties uitvoeren

Transacties zijn een mechanisme dat zorgt voor consistentie van gegevens. Transacties hebben de volgende vier eigenschappen −

  • Atomiciteit − Een transactie is voltooid of er gebeurt helemaal niets.

  • Consistentie − Een transactie moet in een consistente staat beginnen en het systeem in een consistente staat verlaten.

  • Isolatie − Tussenresultaten van een transactie zijn niet zichtbaar buiten de huidige transactie.

  • Duurzaamheid − Zodra een transactie is uitgevoerd, zijn de effecten blijvend, zelfs na een systeemstoring.

De Python DB API 2.0 biedt twee methoden om ofwel vast te leggen of terugdraaien een transactie.

Voorbeeld

U weet al hoe u transacties moet implementeren. Hier is weer een soortgelijk voorbeeld −

# Prepare SQL query to DELETE required records
sql = "DELETE FROM EMPLOYEE WHERE AGE > '%d'" % (20)
try:
   # Execute the SQL command
   cursor.execute(sql)
   # Commit your changes in the database
   db.commit()
except:
   # Rollback in case there is any error
   db.rollback()

COMMIT-bewerking

Commit is de bewerking, die een groen signaal geeft aan de database om de wijzigingen af ​​te ronden, en na deze bewerking kan geen enkele wijziging ongedaan worden gemaakt.

Hier is een eenvoudig voorbeeld om commit . aan te roepen methode.

db.commit()

ROLLBACK-bewerking

Als u niet tevreden bent met een of meer van de wijzigingen en u wilt deze wijzigingen volledig terugdraaien, gebruik dan rollback() methode.

Hier is een eenvoudig voorbeeld om rollback() . aan te roepen methode.

db.rollback()

De verbinding met de database verbreken

Gebruik de methode close() om de databaseverbinding te verbreken.

db.close()

Als de verbinding met een database door de gebruiker wordt gesloten met de methode close(), worden alle openstaande transacties teruggedraaid door de database. In plaats van echter afhankelijk te zijn van implementatiedetails op een lager niveau van de DB, is het beter voor uw toepassing om commit of rollback expliciet aan te roepen.

Fouten afhandelen

Er zijn veel bronnen van fouten. Enkele voorbeelden zijn een syntaxisfout in een uitgevoerde SQL-instructie, een verbindingsfout of het aanroepen van de fetch-methode voor een reeds geannuleerde of voltooide instructiehandle.

De DB API definieert een aantal fouten die in elke databasemodule moeten voorkomen. De volgende tabel geeft een overzicht van deze uitzonderingen.

Sr.nr. Uitzondering en beschrijving
1

Waarschuwing

Gebruikt voor niet-fatale problemen. Moet StandardError onderklassen.

2

Fout

Basisklasse voor fouten. Moet StandardError onderklassen.

3

InterfaceError

Gebruikt voor fouten in de databasemodule, niet de database zelf. Moet subklasse Fout.

4

DatabaseError

Gebruikt voor fouten in de database. Moet subklasse Fout.

5

DataError

Subklasse van DatabaseError die verwijst naar fouten in de gegevens.

6

Operationele fout

Subklasse van DatabaseError die verwijst naar fouten zoals het verlies van een verbinding met de database. Deze fouten vallen over het algemeen buiten de controle van de Python-scripter.

7

Integriteitsfout

Subklasse van DatabaseError voor situaties die de relationele integriteit zouden schaden, zoals uniciteitsbeperkingen of externe sleutels.

8

Interne fout

Subklasse van DatabaseError die verwijst naar interne fouten in de databasemodule, zoals een cursor die niet langer actief is.

9

Programmeerfout

Subklasse van DatabaseError die verwijst naar fouten zoals een slechte tabelnaam en andere dingen die veilig aan jou kunnen worden toegeschreven.

10

NotSupportedError

Subklasse van DatabaseError die verwijst naar het aanroepen van niet-ondersteunde functionaliteit.

Uw Python-scripts zouden deze fouten moeten afhandelen, maar voordat u een van de bovenstaande uitzonderingen gebruikt, moet u ervoor zorgen dat uw MySQLdb die uitzondering ondersteunt. U kunt er meer informatie over krijgen door de DB API 2.0-specificatie te lezen.


Python

  1. Python-gegevenstypen
  2. Python-operators
  3. Python pass-instructie
  4. Python-functieargumenten
  5. Python-woordenboek
  6. Python-iterators
  7. Python-sluitingen
  8. Python datetime
  9. Python-slaap()
  10. Python - Overzicht
  11. Python - Cijfers