Felhasználói eszközök

Eszközök a webhelyen


oktatas:programozas:python:adatbazis:mariadb

< Adatbázis

Python MariaDB

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()

Forrás

oktatas/programozas/python/adatbazis/mariadb.txt · Utolsó módosítás: 2024/01/17 21:24 szerkesztette: admin