Python 2.díl: Práce s databází MySQL (SELECT, UPDATE, INSERT)

Python 2.díl: Práce s databází MySQL (SELECT, UPDATE, INSERT)

Ve druhém díle seriálu věnovanému programovacímu jazyku Python se podíváme na spolupráci pythonu s databází MySQL (MadiaDB). V příkladech si ukážeme SELECT, INSERT a UPDATE, dále použití proměnných, cykly FOR a WHILE, metody fetchone() a fetchall().

Pro připojení k databázovému serveru MySQL je potřeba stáhnout komponentu (knihovnu, rozšíření) PyMySQL a nainstalovat ji pomocí příkazu python setup.py install či přes pip pip3.4 install pymysql. Pak již nic nebrání provedení následujících příkladů.

Python+MySQL: SELECT (výběr dat)


Výběr s fetchone()


Python kód provádí SELECT všech sloupců z MySQL tabulky „tabulka“ pomocí cyklu WHILE a metody fetchone(), dokud platí "row is not None" ("dokud řádek není None = prostě už další řádek nenásleduje").


import pymysql as mysql
con = mysql.connect(host='127.0.0.1',user='user',passwd='heslo',db='databaze')
cur = con.cursor()
cur.execute("SELECT * FROM `tabulka`")
row = cur.fetchone()
while row is not None:
print(row[0], row[1], row[2])
row = cur.fetchone()
cur.close()
con.close()


Výběr s fetchall()


Python kód provádí SELECT všech sloupců z MySQL tabulky „tabulka“ pomocí cyklu FOR a metody fetchall().


import pymysql as mysql
con = mysql.connect(host='127.0.0.1',user='user',passwd='heslo',db='databaze')
cur = con.cursor()
cur.execute("SELECT * FROM `tabulka`")
rows = cur.fetchall()
for row in rows:
print(row)
cur.close()
con.close()


Výběr s fetchone() + proměnné (cyklus WHILE)


Python kód provádí SELECT sloupců "sloupec1", "sloupec2" z MySQL tabulky „tabulka“ pomocí cyklu WHILE, dokud neplatí "row == None". Hodnoty jsou ukládány do proměnných "promenna1" a "promenna2".


import pymysql as mysql
con = mysql.connect(host='127.0.0.1',user='user',passwd='heslo',db='databaze')
with con:
cur = con.cursor()
cur.execute("SELECT sloupec1, sloupec2 FROM `tabulka` WHERE status='0'")
while True:
row = cur.fetchone()
if row == None:
cur.close()
con.close()
promenna1 = str(row[0])
promenna2 = str(row[1])


Výběr s fetchone() + proměnné (cyklus FOR)


Python kód provádí SELECT sloupců "sloupec1", "sloupec2" z MySQL tabulky „tabulka“ pomocí cyklu FOR, dokud nejsou vypsány všechny řádky - jejich počet je zjištěn pomocí funkce rowcount. Hodnoty jsou ukládány do proměnných "promenna1" a "promenna2".


import pymysql as mysql
con = mysql.connect(host='127.0.0.1',user='user',passwd='heslo',db='databaze')
with con:
cur = con.cursor()
cur.execute("SELECT sloupec1, sloupec2 FROM `tabulka`")
for i in range(cur.rowcount):
row = cur.fetchone()
promenna1 = row[0]
promenna2 = row[1]
cur.close()
con.close()



Python+MySQL: INSERT (vložení dat)


Python kód provádí vložení proměnných "promenna1", "promenna 2" a "promenna3" do sloupců "sloupec1", "sloupec2" a "sloupec3" v MySQL tabulce "tabulka".

Vložení dat



import pymysql as mysql
con = mysql.connect(host='127.0.0.1',user='user',passwd='heslo',db='databaze')
cur = con.cursor()
promenna1 = "hodnota1"
promenna2 = "hodnota2"
promenna3 = "hodnota3"
with con:
cur.execute("INSERT INTO `tabulka`(`sloupec1`, `sloupec2`, `sloupec3`) VALUES ('%s', '%s', '%s')" % (promenna1, promennna2, promenna3))
print("Počet upravených řádek:", cur.rowcount)
cur.close()
con.close()


Python+MySQL: UPDATE (úprava dat)


Python kód provádí update sloupce "status" na hodnotu "0" pro záznam s id "25" v MySQL tabulce "tabulka".

Update dat



import pymysql as mysql
con = mysql.connect(host='127.0.0.1',user='user',passwd='heslo',db='databaze')
cur = con.cursor()
with con:
cur.execute("UPDATE tabulka SET status='0' WHERE id = '25'")
print("Počet upravených řádek: ", cur.rowcount)
cur.close()
con.close()


Update dat s proměnnými


Python kód provádí update sloupců "sloupec1", "sloupec2" a "sloupec3" na hodnoty proměnných "promenna1", "promenna2" a "promenna3" pro záznam id = "promenna4" v MySQL tabulce "tabulka".

import pymysql as mysql
con = mysql.connect(host='127.0.0.1',user='user',passwd='heslo',db='databaze')
cur = con.cursor()
promenna1 = "hodnota1"
promenna2 = "hodnota2"
promenna3 = "hodnota3"
promenna4 = "hodnota4"
with con:
cur.execute("UPDATE tabulka SET sloupec1='%s', sloupec2='%s', sloupec3='%s' WHERE id='%s' " % (promenna1, promenna2, promenna3, promenna4))
print("Počet upravených řádek: ", cur.rowcount)
cur.close()
con.close()


Dodatek pro InnoDB


Pokud používáme v MySQL typ (engine) InnoDB, tak je třeba vždy volat navíc
con.commit(). Skript žádnou chybu nebude vyhazovat, ale data se do tabulky neuloží!

Komentáře

Vaše reakce na Python 2.díl: Práce s databází MySQL (SELECT, UPDATE, INSERT)
Switchbla…

03.07.2017 [1]
Ahoj,

mám docela zajímavý problém když provádím insert pomocí této konstrukce v Pythonu:


<blockquote><pre><code data-language="python">
for row in notes:
data = row[0]
datum = row[1]
query = str(&quot;INSERT INTO `testTable` (data, datum) VALUES ('%s', '%s')&quot; % (data, datum))
print(query)
cur.execute(query)

cur.close()
</code></pre></blockquote>



Stane se to, že data se do MySQL tabulky nepřenesou, avšak když provedu SQL dotaz z proměnné "query" přímo na databázovém serveru, tak se tam daný záznam v pořádku uloží, avšak dostane id např. 150 a pak pustím znovu skript, nic se neuloží a zadám zase ručně jeden SQL dotaz a id dostane např. 250, ačkoliv předešlé id je vidět 150! To je fakt divný. Nějaká rada prosím?

A jinak díky za super článek pro začátečníky
Rusty

04.07.2017 [2]
Poslední komentář
Ahoj, použij commit() a uvidíš, určitě to pak projde:

<blockquote><pre><code data-language="python">
for row in notes:
data = row[0]
datum = row[1]
query = str(&quot;INSERT INTO `testTable` (data, datum) VALUES ('%s', '%s')&quot; % (data, datum))
print(query)
cur.execute(query)
con.autocommit(True)

cur.close()
</code></pre></blockquote>

Reference

Podívejte se na naše reference

Prohlédnout

Aplikace

Podívejte se na naše aplikace

Prohlédnout

Co umíme?

Podívejte se co umíme

Prohlédnout

Co umíme?

Vytváříme sofistikované aplikace pro náročné

Od webových aplikací přes android až po převodové můstky či složité informační systémy.

Podívejte se k nám

Tento web používá soubory cookie. Dalším procházením tohoto webu vyjadřujete souhlas s jejich používáním.. Více informací zde.