flask database handling how use flask with database
V tomto výučbe databázy Flask sa naučte používať Flask s rôznymi databázami, ako sú Flask MySQL, Flask MongoDB, SQLite atď.
Rozbalíme koncepty obsiahnuté v našom prvom tutoriáli o Flask Python. Začíname používaním Flask s MongoDB, dokumentovou databázou NoSQL, kde NoSQL znamená nielen SQL.
Najskôr sa venujeme konceptu spojenia s databázou a potom vám dáme vedieť, ako sa nezamknúť pomocou jednej databázy. Ak je to potrebné, môžeme zmeniť iba konfigurácie, aby sme zmenili backend databázy.
=> Vyskúšajte Sprievodcu výcvikom na dokonalú banku tu
Čo sa dozviete:
Výukový program pre bankovú databázu
V tomto návode môžu čitatelia nakresliť porovnanie diskutovaných databáz. Ďalej hovoríme o Flask-MongoEngine, Flask-SQLAlchemy a Flask MongoAlchemy. Tieto dva ORM, t. J. Object Relation Mapper, sú veľmi populárne.
ORM pod kapotou transparentne prekladajú objekty (databázové modely) do databázových príkazov alebo príkazov SQL.
Výhody použitia ORM sú uvedené nižšie:
- Vývojári môžu namiesto tabuliek a jazyka SQL pracovať s objektmi.
- Pomocou migrácie môžete sledovať aktualizácie databáz.
- Znižuje to náklady na vývoj a čas.
- Prekonáva databázovo špecifické rozdiely SQL.
Pri použití ORM programátori nemusia písať zložité dotazy a príkazy SQL, aby mohli vykonávať základné príkazy SQL.
Pripojiť k databáze
Otvorte konfiguračný súbor a všimnite si nižšie uvedené hodnoty. Aplikácia Flask-Appbuilder prevezme z uvedených hodnôt podrobnosti databázy na pripojovacom reťazci.
# The MongoEngine connection string. MONGODB_SETTINGS = { 'DB': 'mydb', 'connect': False, }
Všetky nízkoúrovňové funkcie správy databázy serverom ORM boli zabalené pod príkazmi Flask Click, ktoré môžeme vidieť pomocou príkazu flask fab - help na príkazovom riadku.
Flask MongoDB
V tejto časti sa dozvieme, ako používať ORM skôr, ako používať surové skripty SQL na prácu s databázami v banke.
MongoDB je nerelačná dokumentová databáza. Už sme to nakonfigurovali s našou súčasnou ukážkovou aplikáciou pre banky.
Na správu servera MongoDB na lokálnom počítači použite nižšie uvedené príkazy.
sudo systemctl start mongod # to start MongoDB sudo systemctl stop mongod # to stop MongoDB sudo systemctl status mongod # to check status MongoDB
Diskutovali sme o dvoch slávnych ORM, ktoré môžete použiť s MongoDB a Flask.
Pomocou návrhára databáz sme vytvorili dve tabuľky s názvom Album a skladba a definovali sme vzájomný vzťah medzi albumami a skladbami. Nižšie je uvedený obrázok.
Flask MongoEngine
Poďme si vytvoriť náš prvý model MongoEngine DB.
Vytvorte alebo upravte súbor models.py v adresári aplikácie a pridajte nasledujúci kód.
from mongoengine import Document from mongoengine import DateTimeField, StringField, ReferenceField, ListField, IntField class Album(Document): name = StringField(unique=True, required=True, max_lenth=100) def __str__(self): return self.name class Song(Document): title = StringField(max_lenth=200, required=True, unique=True) rating = IntField(default=0,max_lenth=1) # 1 to 9 album = ReferenceField(Album) def __str__(self): return self.title
Vytvorili sme dva modely MongoEngine s názvom Album a pieseň. Tieto modely zodpovedajú príslušným dokumentom v MongoDB.
Album má jedno pole typového reťazca s určitými obmedzeniami.
- Názov albumu je jedinečný.
- Názov albumu nemôže byť prázdny.
- Názov albumu môže mať maximálne sto znakov.
Dokument Song má podobne názov, hodnotiace pole a referenčné pole, ktoré smeruje na iný dokument, Album. Uložme tento súbor a vytvorme údaje pomocou týchto dvoch modelov. Prejdite do koreňového adresára projektu a pomocou príkazu flask shell otvorte aplikáciu flask v prostredí Python.
e-mail cracker online hack nástroj
Po zadaní shellu použite nižšie uvedené príkazy na prístup k modelom MongoEngine a vytvoreniu vzorových údajov, ako je uvedené nižšie.
>>> from app.models import Album, Song >>> album1 = Album(name='Album1') >>> album1.save() >>> song1 = Song(title='Song1', rating=9, album=album1) >>> song1.save()
Poďme teraz vstúpiť do databázy pomocou klienta Mongo a zistiť, či sa údaje ukladajú na základe vyššie uvedených vyhlásení. Vo vyššie uvedenom kóde najskôr importujeme Album a Song, potom vytvoríme ich objekty s požadovanými hodnotami parametrov.
Tu sú parametre názvy polí, ako sú definované v modeloch, a tieto údaje uvádzame ako hodnoty týchto parametrov. Po úspešnom vytvorení objektu zavoláme metódu uloženia na príslušné objekty, aby sme dokumenty uložili do databázy.
Pomocou príkazu mongo vstúpte do MongoDB. Po pripojení k serveru pomocou klienta mongo použite nasledujúce príkazy.
# 1) Skontrolujte zoznam databáz
> show dbs #----- output ---- admin 0.000GB config 0.000GB local 0.000GB mydb 0.001GB #----- output ----
# 2) Použite našu databázu s názvom mydb
> use mydb #----- output ---- switched to db mydb #----- output ----
# 3) Skontrolujte zbierky a.k.a tabuľky v RDBMS
> show collections #----- output ---- album permission permission_view role song user view_menu #----- output ----
# 4) Uveďte zoznam všetkých dokumentov v zbierke albumov.
> db.album.findOne() #----- output ---- { '_id' : ObjectId('5eddb43b8b1e179bef87d41d'), 'name' : 'Album1' } #----- output ----
# 5) Uveďte akýkoľvek dokument v zbierke skladieb.
> db.song.findOne() #----- output ---- { '_id' : ObjectId('5eddb74b0177c8f096d880ec'), 'title' : 'Song1', 'rating' : 9, 'album' : ObjectId('5eddb43b8b1e179bef87d41d') } #----- output ----
Ak ste pracovali s Djangom, uvedomíte si, že MongoEngine funguje veľmi podobne ako Django zabudovaný ORM. Na poslednom výstupe, keď sme dopytovali skladbu, si všimnite, aký je odkaz na iný dokument pre pole albumu.
Teraz vytvorme ďalší album a vykonajme aktualizáciu existujúceho dokumentu skladby.
>>> from app.models import Album, Song >>> album2 = Album(name='Album2') >>> album2.save() >>> songs_q = Song.objects(title='Song1') # query the database >>> songs_q.count() 1 >>> song1 = songs_q[0] >>> song1.album = album2 # update the album field >>> song1.save()
Importujeme oba modely, tj. Album a skladbu. Potom vytvorte nový dokument s názvom album2. Zbierka piesní Query Song v databáze a získajte skladbu pomocou jej názvu. Potom pristúpime k objektu pomocou indexu poľa výsledku dotazu, aktualizujeme pomocou operátora priradenia a aktualizovaný dokument uložíme.
Teraz znova použijeme klienta Mongo na kontrolu uložených zbierok.
> db.album.find().pretty() ## output { '_id' : ObjectId('5eddb43b8b1e179bef87d41d'), 'name' : 'Album1' } { '_id' : ObjectId('5eddbaab9fd7d3ec78b2fd8f'), 'name' : 'Album2' } > db.song.find().pretty() ## output { '_id' : ObjectId('5eddb74b0177c8f096d880ec'), 'title' : 'Song1', 'rating' : 9, 'album' : ObjectId('5eddbaab9fd7d3ec78b2fd8f') }
Na výstupe z druhého dopytu v úryvku vyššie si všimnite aktualizované pole albumu v dokumente Song1.
Teraz poďme odstrániť dokumenty v zbierkach albumov aj skladieb. Na odstránenie záznamov použite nasledujúci kód. Ak ste stále v banke, potom pomocou nižšie uvedených príkazov odstráňte dokument a overte odstránenie.
>>> song1.delete() >>> songs_q = Song.objects(title='Song1') >>> songs_q.count() 0 >>>
Na odstránenie dokumentu zo zbierky skladieb používame metódu odstránenia v skladbe1. Všetky základné operácie CRUD sme mohli vykonávať pomocou banky. Ďalej môžeme použiť triedu ModelView flask_appbuilder na zobrazenie databázových modelov ako pohľadov.
Vytvorte zobrazenia založené na modeli, ako je uvedené v kóde nižšie.
from app.models import Album, Song from flask_appbuilder import ModelView from flask_appbuilder.models.mongoengine.interface import MongoEngineInterface class SongsView(ModelView): datamodel = MongoEngineInterface(Song) class AlbumView(ModelView): datamodel = MongoEngineInterface(Album)
Najskôr importujeme databázové modely spolu s ModelView a MongoEngineInterface. Potom podtriedime ModelView a priradíme konkrétne inštancie MongoEngineInterface k atribútu dátového modelu našich zobrazení.
Teraz zaregistrujme SongsView a AlbumView pomocou ponuky, ktorá je uvedená nižšie v rovnakej kategórii.
appbuilder.add_view(AlbumView, 'Album View', category='Model Views') appbuilder.add_view(SongsView, 'Song View', category='Model Views')
Ak chcete získať prístup k týmto zobrazeniam aplikácie, prejdite na adresu http: // localhost: 8080 /, prihláste sa do aplikácie pomocou prihlasovacích údajov správcu a vykonaním nižšie uvedených krokov pochopíte predvolené zobrazenia založené na databázovom modeli.
Krok 1: Kliknite na ponuku Model View
Krok 2: Kliknite na podmenu Zobraziť album.
Krok 3: Kliknutím na ikonu plus vytvoríte dokument alebo záznam.
Krok 4: Zadajte názov albumu a uložte ho.
Podobne ako v predchádzajúcich krokoch, aj pomocou týchto pohľadov môžete vykonávať všetky operácie CRUD. Vytvorme preto pieseň pomocou podponuky Zobrazenie piesne, ako je to znázornené na obrázku nižšie. Všimnite si, ako sa v rozbaľovacej ponuke zobrazuje referenčné pole súvisiaceho databázového modelu. Skúste vytvoriť ďalšie albumy a skladby.
Rovnaké koncepty môžete ďalej preskúmať pomocou MongoAlchemy; Ďalším ľahko použiteľným a podobným ORM vytvoreným pre ľahký prístup a manipuláciu s databázami MongoDB pomocou Pythonu.
Skontrolujte dokumentáciu MongoAlchemy tu . Odporúčame vám však základné porozumenie Flask-SQLAlchemy vybudovať tak, že najskôr prejdete nižšie uvedenou časťou.
Flask Sqlite alebo Flask MySQL
V tejto časti nahradíme rovnakú aplikáciu pre SQLAlchemy ako backendový engine. Preto prosím vykonajte všetky svoje doterajšie zmeny a vytvorte samostatný vetvu Git tutorial-3-sqla. Banka môže ako databázu typu backend používať SQLite a MySQL. Odporúčame vám použiť SQLAlchemy ako ORM s týmito relačnými databázami.
Poďme začať so zmenami, ktoré musíme urobiť po tom, čo si skontrolujete novú pobočku.
Konfig
Otvorte súbor config.py v koreňovom adresári projektu a odstráňte pripojovací reťazec MongoDB. Aktualizujte súbor config.py pripojovacím reťazcom pre Flask SQLite alebo Flask MySQL.
# The SQLAlchemy connection string. SQLALCHEMY_DATABASE_URI = 'sqlite:///' + os.path.join(basedir, 'app.db') # SQLALCHEMY_DATABASE_URI = 'mysql://myapp@localhost/myapp'
Aplikácia __init__.py
Teraz otvorte súbor app / __ init__.py a vzdialené importy súvisiace s MongoEngine a importujte SQLA, ako je uvedené nižšie.
#from flask_appbuilder.security.mongoengine.manager import SecurityManager from flask_appbuilder import AppBuilder, SQLA #from flask_mongoengine import MongoEngine # other lines of code #db = MongoEngine(app) db = SQLA(app) #appbuilder = AppBuilder(app, security_manager_class=SecurityManager) appbuilder = AppBuilder(app, db.session)
Fľaštové modely
Aktualizujte models.py pomocou nasledujúceho kódu a odstráňte kód súvisiaci s MongoEngine.
from flask_appbuilder import Model from sqlalchemy import Column, Integer, String, ForeignKey from sqlalchemy.orm import relationship
Pohľady na banku
Aktualizujte view.py nasledujúcim kódom.
from flask_appbuilder import ModelView from app.models import Album, Song class AlbumView(ModelView): datamodel = SQLAInterface(Album) class SongsView(ModelView): datamodel = SQLAInterface(Song) appbuilder.add_view(AlbumView, 'Album View', category='Model Views') appbuilder.add_view(SongsView, 'Song View', category='Model Views')
Všimnite si, že sme použili rovnakú triedu ModelView, avšak MongoEngineInterface sme zmenili pomocou SQLAInterface.
Na vytvorenie tabuliek a ich zodpovedajúcich vzťahov vykonáme nižšie uvedený príkaz na vytvorenie databázových objektov.
flask fab create-db
Pamätajte, že sme zmenili backend databázy. Preto na vytvorenie administrátora použite príkaz flask fab create-admin. Teraz spustite vývojový server skôr; pomocou pythonu run.py. Prejdite na adresu http: // localhost: 8080.
Tu v tomto okamihu bude naša aplikácia fungovať tak, ako fungovala v prípade MongoDB. Vyskúšajte to so všetkými operáciami CRUD, ako sme to urobili v predchádzajúcich častiach.
Okrem toho sme si pri používaní prehliadača SQLite DB ukázali obe zodpovedajúce tabuľky pre databázové modely.
Banka MySQL
Aby sme mohli použiť MySQL ako databázový backend, keď používame Flask-SQLAlchemy, stačí aktualizovať jednu konfiguráciu týkajúcu sa databázy v config.py.
SQLALCHEMY_DATABASE_URI = 'mysql://myapp@localhost/myapp'
Podľa daného pripojovacieho reťazca je názov databázy myapp. Užívateľom na pripojenie k databáze je myapp @ localhost. Oboje sú však nevyhnutné, a preto by sme ich mali vytvárať pomocou podrobností uvedených nižšie.
Preto pomocou dotazov uvedených nižšie vytvorte používateľa a databázu, aby fungovala databáza Flask MySQL vo vzájomnom spojení. Tieto dotazy vykonajte v klientovi MySQL.
CREATE USER 'myapp'@'localhost' IDENTIFIED BY ''; GRANT ALL PRIVILEGES ON *.* TO 'myapp'@'localhost'; FLUSH PRIVILEGES; CREATE DATABASE myapp;
Musíme si tiež nainštalovať Python3 mysqlclient. Nainštalujte vývojové hlavičky a knižnice, ako je uvedené v nasledujúcich príkazoch.
sudo apt-get install python3-dev default-libmysqlclient-dev build-essential pip install mysqlclient
Teraz, pretože sme zmenili databázový backend, musíme vytvoriť tabuľky zodpovedajúce databázovým modelom. Potrebujeme tiež vytvoriť administrátora banky, pretože všetky registrované položky ponuky sú chránené a je k nim prístup iba pre existujúceho používateľa v aplikácii.
ako otvoriť súbor .java
Tieto nižšie uvedené príkazy skrývajú príkazy SQL nižšej úrovne na vypúšťanie a vytváranie tabuliek.
flask fab create-db flask fab create-admin
Po úspešnom dokončení všetkých vyššie uvedených krokov môžeme opäť prejsť na adresu http: // localhost: 8080. Teraz vstúpte do aplikácie, ako sme ju získali v prípade Flask SQLite.
Migrácia banky
Počas počiatočného vývoja aplikácie dôjde v schéme databázy k mnohým zmenám. Vývojári, ktorí zvyšujú čas potrebný na vývoj, musia tieto zmeny robiť často. V takýchto podobných scenároch je plugin Flask-Migrate celkom užitočný.
Poďme si nainštalovať Flask-Migrate.
pip install flask-migrate
Po úspešnej inštalácii sa pridá čiastkový príkaz db. Skontrolujte obslužné programy príkazového riadku, ktoré sú pridané do tohto čiastkového príkazu db, pomocou nižšie uvedeného kódu.
flask db --help
Najskôr musíme vytvoriť objekt migrácie, ako je uvedené nižšie v aplikácii / __ init__.py.
from flask import Flask from flask_migrate import Migrate app = Flask(__name__) migrate = Migrate(app, db)
Vyskúšajme niektoré príkazy s databázou, ktorú máme v našej aplikácii.
Inicializujte samostatné úložisko migrácie.
flask db init
Podobne ako vyššie uvedené príkazy existujú aj príkazy na vytváranie migrácií a ich použitie pomocou príkazu upgradovať. Tieto migračné príkazy použijeme ako súčasť pracovného toku v našich ďalších tutoriáloch, kedykoľvek to bude potrebné.
často kladené otázky
Môžete sa stretnúť s niektorými otázkami súvisiacimi s používaním databáz s Flask.
Otázka 1) Akú databázu používa banka?
Odpoveď: Flask podporuje všetky databázy, ktoré podporuje SQLAlchemy, čo je databázová sada nástrojov pre Python a je to ORM (Object Relation Mapper). Môžeme nainštalovať Flask-SQLAlchemy z PyPI pre prácu so SQLAlchemy.
Flask-Alchemy je doplnok Flask a vyžaduje okrem inštalácie minimálnu konfiguráciu. Niektoré z prevládajúcich databáz, ktoré vývojári používajú s Flask-SQLAlchemy, sú SQLite, PostgreSQL, MySQL atď.
Flask má tiež doplnky ako Flask-MongoEngine, Flask-MongoAlchemy, Flask-CouchDB atď. Na prácu s dokumentovými databázami NoSQL, ako sú MongoDB a CouchDB.
Otázka 2) Ako vytvorím databázu v banke?
Odpoveď: Vytvorenie databázy v banke všeobecne závisí od vzoru, za ktorým nasleduje príslušný plugin Flask. Takmer všetky doplnky vytvárajú databázy na základe nastavení pripojenia k databáze definovaných v konfigurácii banky v projekte.
Ak nepoužívate doplnok, môžete napísať vlastnú metódu na vytvorenie databázy v banke.
Nižšie sme uviedli triviálny príklad vytvorenia príkladu SQLite. Tento príklad používa objekt g na udržanie referencie pripojenia k databáze.
import sqlite3 from flask import g # g and current_app object current_app.config['DATABASE'] = 'MYDB' # Name of the database def get_db(): '''A method to get the database connection''' if 'db' not in g: g.db = sqlite3.connect( current_app.config['DATABASE'], detect_types=sqlite3.PARSE_DECLTYPES ) g.db.row_factory = sqlite3.Row return g.db def close_db(e=None): '''A method to close the database connection''' db = g.pop('db', None) if db is not None: db.close()
Otázka č. 3) Ako zobrazujete údaje z databázy v banke?
Odpoveď: V banke používajú vývojári rôzne mapovače relačných objektov, ktoré sa tiež nazývajú ORM. Tieto ORM majú vo všeobecnosti API na prístup do databázy pomocou atribútu dotazu na čítanie údajov z definovaného databázového modelu. Výsledky dotazov, ktoré sú uložené v dátových štruktúrach Pythonu, sa zobrazujú pomocou šablón banky.
Počas testovania databázových modelov však môžu byť výsledky vytlačené aj na konzole vo Flask Shell.
Jeden taký príklad dotazovania sa na dáta pomocou API dotazov vo Flask-SQLAlchemy je uvedený nižšie.
>>> user1 = User.query.filter_by(username='testuser').first() >>> user1.id 2 >>> user1.email u'user1@example.org'
Záver
V tomto tutoriáli sme sa venovali konceptom spojeným s pripojením k rôznym databázam pomocou rovnakého rozloženia projektu. Odklonili sme sa od paradigmy písania nespracovaných dotazov SQL do kódu.
Prístup k písaniu tabuliek vo forme modelov nás robí agilnejšími. Taktiež sme sa venovali koncepciám ukladania databázových informácií ako migrácií. Migrácia ďalej zvyšuje flexibilitu nášho vývojového pracovného toku.
Doteraz sme pracovali na archetype, ktorý automaticky generuje nástroj na tvorbu aplikácií Flask. V našich ďalších tutoriáloch v tejto sérii urobíme ešte jeden krok a prediskutujeme ďalšie varné dosky banky a koncepcie práce s plánmi banky.
=> Skontrolujte VŠETKY návody pre banky
Odporúčané čítanie
- Výukový program pre fľašu Python - Úvod do banky pre začiatočníkov
- Výukový program pre Flask API s príkladom Rozšírenie banky s API
- Aplikácia banky a rozloženie projektu banky s modrotlačou a bootstrapom
- Najobľúbenejších 31 dotazov na rozhovor s pythonovskou bankou s odpoveďami
- Top 10 nástrojov na návrh databázy na zostavenie komplexných dátových modelov
- Výukový program na vytvorenie databázy MongoDB
- MongoDB Vytvorenie zálohy databázy