Tartalomjegyzék
Python MariaDB
- Szerző: Sallai András
- Copyright © 2020, Sallai András
- Szerkesztve: 2024
- Licenc: CC BY-SA 4.0
- Web: https://szit.hu
Bevezetés
A MariaDB egy SQL alapú adatbáziskezelő rendszer, a MySQL-ből ágaztatva, azzal teljesen kompatibilis.
A MariaDB TCP hálózati foglalaton keresztül érhető el, azonosítás után.
A MariaDB elérése Python nyelven
A MariaDB elérése megvalósítható mysql csomagokkal is, de itt most kifejezetten MariaDB számára készített csomaggal imserkedünk.
Amire szükség van:
- Telepített Python 3 (minimum 3.6)
- MariaDB 10.x
- Telepített MariaDB Connector/C (legalább egy 3.1.5 vagy újabb)
Telepítés
A szükséges csomagok telepítése Debian GNU/Linux 10-en:
Telepítsük fel a MariaDB Connector/C-t:
apt install libmariadb-dev
A Python modul telepítése:
pip install mariadb
Linuxon és MacOS:
pip3 install mariadb
Ha szükséges:
python3 -m pip install --upgrade pip
Tesztelés:
python >>> import mariadb >>> >>>
macOS
brew install mariadb-connector-c pip3 install mysqlclient
Lekérdezés
- database.py
import mariadb config = { 'host': 'localhost', 'user': 'feherbt', 'password': 'titok', } conn = mariadb.connect(**config, database='feherbt') cur = conn.cursor() sql = """ select * from employees """ cur.execute(sql) print(cur.fetchall()) conn.close()
A talált sorok száma:
cur.execute(sql) datas = cur.fetchall() if cur.rownumber > 0: print(cur.rownumber) else: print('Nincs találat')
Lekérdezés mezőnként
- leker.py
import mariadb config = { 'host': 'localhost', 'user': 'feherbt', 'password': 'titok', } conn = mariadb.connect(**config, database='feherbt') cur = conn.cursor() sql = """ select * from employees """ cur.execute(sql) for (id, name, city, salary) in cur: print(f"{id}:{name}:{city}:{salary}") conn.close()
Beszúrás
- beszur.py
import mariadb config = { 'host': 'localhost', 'user': 'feherbt', 'password': 'titok', } conn = mariadb.connect(**config, database='feherbt') cur = conn.cursor() sql = """ insert into employees (name, city, salary) values ('Verem László', 'Szeged', 3850000) """ cur.execute(sql) print('Utoljára beszúrt: ', cur.lastrowid) print('Érintett rekordok száma: ', cur.rowcount) conn.commit() conn.close()
Behelyettesített beszúrás
- helyett.py
sql = """ insert into employees (name, city, salary) values ('%s', '%s', %.0f) """ % (employee.name, employee.city, employee.salary) cur.execute(sql)
Előkészített beszúrás
Van különbség a MySQL és a MariaDB megvalósítás között. MySQL-ben a helyettesítendő részt %s-el jelöljük, míg MariaDB esetén ez kérdőjel: ?
- elokeszitett.py
import mariadb config = { 'host': 'localhost', 'user': 'feherbt', 'password': 'titok', } conn = mariadb.connect(**config, database='feherbt') cur = conn.cursor() sql = """ insert into employees (name, city, salary) values (?, ?, ?) """ values = ('Árbi Szabolcs', 'Miskolc', 2240000) cur.execute(sql, values) conn.commit() conn.close()
Több elem beszúrása
- tobb.py
import mariadb config = { 'host': 'localhost', 'user': 'feherbt', 'password': 'titok', } conn = mariadb.connect(**config, database='feherbt') cur = conn.cursor() sql = """ insert into employees (name, city, salary) values (?, ?, ?) """ values = [ ('Csevegő Emese', 'Miskolc', 2250000), ('Rakica Katalin', 'Szolnok', 3250000), ('Libi Melinda', 'Miskolc', 4950000), ] cur.executemany(sql, values) print('Utoljára beszúrt: ', cur.lastrowid) print('Érintett rekordok száma: ', cur.rowcount) conn.commit() conn.close()
Kivételkezelés
- database.py
import mariadb config = { 'host': 'localhost', 'user': 'penztar', 'password': 'titok', } try: conn = mariadb.connect(**config, database='penztar') except mariadb.Error as err: print(err, file=sys.stderr) sys.exit(1) cur = conn.cursor() cur.execute("show tables") print(cur.fetchall()) conn.close()
Tranzakció
A tranzakció a cur = conn.cursor() sorral indul és a conn.commit() sorral ér véget.
- tranz.py
import mariadb config = { 'host': 'localhost', 'user': 'feherbt', 'password': 'titok', } conn = mariadb.connect(**config, database='feherbt') cur = conn.cursor() sql = """ insert into employees (name, city, salary) values (?, ?, ?) """ values = ('Csirke Borbála', 'Miskolc', 5250000) cur.execute(sql, values) lastrowid = cur.lastrowid print('Utoljára beszúrt: ', cur.lastrowid) print('Érintett rekordok száma: ', cur.rowcount) sql = """ update employees set name='Tengeri Béla' where id = {lastrowid} """ conn.commit() conn.close()
Tranzakció kivételkezeléssel
- tranzki.py
import mariadb config = { 'host': 'localhost', 'user': 'feherbt', 'password': 'titok', } try : conn = mariadb.connect(**config, database='feherbt') cur = conn.cursor() sql = """ insert into employees (name, city, salary) values (?, ?, ?) """ values = ('Csirke Borbála', 'Miskolc', 5250000) cur.execute(sql, values) lastrowid = cur.lastrowid print('Utoljára beszúrt: ', cur.lastrowid) print('Érintett rekordok száma: ', cur.rowcount) sql = """ update employees set name='Tengeri Béla' where id = {lastrowid} """ conn.commit() conn.close() except Exception as ex: print(f'Hiba a commit során: {ex}') conn.rollback()
Adatbázis létrehozása
conn = mariadb.connect(host='localhost', user='username', password='titok') cur = conn.cursor() cur.execute("create database valami") cur.execute("showtables") databases = cur.fetchall() for database in databases: print(database) conn.close()
Módosítás
conn = connectDb() cur = conn.cursor() sql = """ update vehicles set sold=1 where id = (?) """ values = (vehicle_id,) cur.execute(sql, values) conn.commit() conn.close()