flask database handling how use flask with database
V tej vadnici baze podatkov Flask se naučite uporabljati Flask z različnimi bazami podatkov, kot so Flask MySQL, Flask MongoDB, SQLite itd.
Razširili bomo koncepte, opisane v naši prvi vadnici Flask Python. Začnemo z uporabo Flask z MongoDB, dokumentno bazo podatkov NoSQL, kjer NoSQL pomeni Not Only SQL.
Najprej obravnavamo koncept povezovanja z bazo podatkov, nato pa vas obvestimo, kako se ne zaklenete z eno bazo podatkov. Po potrebi lahko spremenimo samo konfiguracije, da spremenimo zaledje baze podatkov.
=> Tukaj si oglejte Vodnik za usposabljanje Perfect Flask
Kaj se boste naučili:
Vadnica za bazo podatkov o bučah
V tej vadnici lahko bralci naredijo primerjavo med obravnavanimi bazami podatkov. Poleg tega govorimo o Flask-MongoEngine, Flask-SQLAlchemy in Flask MongoAlchemy. Ta dva ORM, tj. Map Relation Mapper, sta zelo priljubljena.
ORM-ji pod pokrovom transparentno prevedejo predmete (modele baz podatkov) v ukaze baze podatkov ali stavke SQL.
Prednosti uporabe ORM so navedene spodaj:
- Razvijalci lahko delajo s predmeti namesto s tabelami in SQL.
- Uporabite selitve za beleženje posodobitev baze podatkov.
- Zmanjšuje razvojne stroške in čas.
- Premaga razlike v SQL, specifične za bazo podatkov.
Pri uporabi ORM programerjem ni treba pisati zapletenih poizvedb in ukazov SQL za izvajanje osnovnih ukazov SQL.
Povežite se z bazo podatkov
Odprite konfiguracijsko datoteko in opazite spodnje vrednosti. Flask-Appbuilder iz omenjenih vrednosti prevzame podrobnosti baze podatkov o nizu povezave.
# The MongoEngine connection string. MONGODB_SETTINGS = { 'DB': 'mydb', 'connect': False, } Vse funkcije nizkega nivoja upravljanja zbirke podatkov s strani ORM so zavite pod ukaze Flask Click, kar lahko vidimo z uporabo flask fab –help v ukazni vrstici.
Bučka MongoDB
V tem razdelku se bomo naučili, kako uporabljati ORM-je, namesto da uporabljamo surove skripte SQL za delo z bazami podatkov v Flasku.
MongoDB je nerelacijska zbirka podatkov, ki temelji na dokumentih. To smo že konfigurirali z našo trenutno aplikacijsko aplikacijo za bučke.
Uporabite spodnje ukaze za upravljanje strežnika MongoDB na lokalnem računalniku.
sudo systemctl start mongod # to start MongoDB sudo systemctl stop mongod # to stop MongoDB sudo systemctl status mongod # to check status MongoDBRazpravljali smo o dveh slavnih ORM-jih, ki jih lahko uporabljate z MongoDB in Flask.
Z uporabo oblikovalca baz podatkov smo ustvarili dve tabeli, imenovani Album in Song, in opredelili razmerje med številkami in albumom. Spodaj je slika, ki prikazuje isto.
vprašanja za ročni preizkus za 4-letne izkušnje

Bučka MongoEngine
Zdaj pa ustvarimo svoj prvi model DB MongoEngine.
Ustvarite ali uredite datoteko models.py v imeniku aplikacije in dodajte naslednjo kodo.
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.titleUstvarili smo dva modela MongoEngine, imenovana Album in Song. Ti modeli ustrezajo ustreznim dokumentom v MongoDB.
Album ima eno polje vrste niz z nekaterimi omejitvami.
- Ime albuma je edinstveno.
- Ime albuma ne sme biti prazno.
- Ime albuma lahko vsebuje največ sto znakov.
Podobno ima dokument Song naslov, ocenjevalno polje in referenčno polje, ki kaže na drug dokument, album. Shranimo to datoteko in ustvarimo podatke z uporabo teh dveh modelov. Pojdite v korenski imenik projekta in z ukazom lupine bučke dostopite do aplikacije bučke v lupini Python.
Ko vnesete lupino, uporabite spodnje izjave za dostop do modelov MongoEngine in ustvarite vzorčne podatke, kot je prikazano spodaj.
>>> from app.models import Album, Song >>> album1 = Album(name='Album1') >>> album1.save() >>> song1 = Song(title='Song1', rating=9, album=album1) >>> song1.save()Zdaj pojdimo do baze podatkov z odjemalcem Mongo in preverimo, ali so podatki shranjeni kot rezultat zgoraj danih izjav. V zgornjo kodo najprej uvozimo Album in Song, nato pa ustvarimo njihove predmete z zahtevanimi vrednostmi parametrov.
Tu so parametri imena polj, kot so opredeljena v modelih, in te podatke omenjamo kot vrednosti teh parametrov. Ko je izdelava predmeta uspešna, za shranjevanje dokumentov v bazo podatkov pokličemo metodo shranjevanja na ustreznih objektih.
Za dostop do MongoDB uporabite ukaz mongo. Ko se s strežnikom povežete z odjemalcem mongo, uporabite spodnje ukaze.
# 1) Preverite seznam baz podatkov
> show dbs #----- output ---- admin 0.000GB config 0.000GB local 0.000GB mydb 0.001GB #----- output ----# 2) Uporabite našo bazo podatkov, imenovano mydb
> use mydb #----- output ---- switched to db mydb #----- output ----# 3) Preverite zbirke a.k.a tabel v RDBMS
> show collections #----- output ---- album permission permission_view role song user view_menu #----- output ----# 4) Navedite kateri koli dokument v zbirki albumov.
> db.album.findOne() #----- output ---- { '_id' : ObjectId('5eddb43b8b1e179bef87d41d'), 'name' : 'Album1' } #----- output ----# 5) Navedite kateri koli dokument v zbirki pesmi.
> db.song.findOne() #----- output ---- { '_id' : ObjectId('5eddb74b0177c8f096d880ec'), 'title' : 'Song1', 'rating' : 9, 'album' : ObjectId('5eddb43b8b1e179bef87d41d') } #----- output ----Če ste že delali z Django, boste ugotovili, da MongoEngine deluje zelo podobno kot vgrajeni Djangov ORM. V zadnjem izhodu, ko smo povprašali po skladbi, opazimo, kako referenca drugega dokumenta je na področju albuma.
Zdaj pa ustvarimo nov album in izvedimo posodobitev obstoječega dokumenta pesmi.
>>> 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() Uvozimo oba modela, tj. Album in Song. Nato ustvarite nov dokument, imenovan album2. Poizvedite zbirko pesmi v zbirki podatkov in poiščite skladbo z naslovom. Nato do predmeta dostopamo z indeksom matrike rezultata poizvedbe, posodobimo z operaterjem dodelitve in shranimo posodobljeni dokument.
Zdaj ponovno uporabimo odjemalca Mongo za preverjanje shranjenih zbirk.
> 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') }V izhodu druge poizvedbe v zgornjem delčku opazite posodobljeno polje albuma dokumenta Song1.
Zdaj pa izbrišimo dokumente v zbirki albumov in pesmi. Za odstranitev zapisov uporabite spodnjo kodo. Če ste še vedno v lupini bučke, uporabite spodnje ukaze za brisanje dokumenta in preverjanje brisanja.
vprašanja in odgovori za preskušanje podatkovnih baz
>>> song1.delete() >>> songs_q = Song.objects(title='Song1') >>> songs_q.count() 0 >>>Za brisanje dokumenta iz zbirke pesmi uporabljamo metodo delete na song1. Vse osnovne operacije CRUD smo lahko izvajali z lupino bučke. Poleg tega lahko uporabimo razred ModelView flask_appbuilder za prikaz modelov baze podatkov kot poglede.
Ustvarite poglede na podlagi modela, kot je prikazano v spodnji kodi.
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)Najprej uvozimo modele baz podatkov, skupaj z ModelView in MongoEngineInterface. Nato podrazred ModelView in atributu podatkovnega modela naših pogledov dodelimo določene primerke MongoEngineInterface.
Zdaj registrirajmo SongsView in AlbumView v meniju, kot je prikazano spodaj, v isti kategoriji.
appbuilder.add_view(AlbumView, 'Album View', category='Model Views') appbuilder.add_view(SongsView, 'Song View', category='Model Views')Če želite dostopati do teh pogledov v aplikaciji, pojdite na http: // localhost: 8080 /, prijavite se v aplikacijo s skrbniškimi poverilnicami in izvedite spodnje korake, da boste razumeli privzete poglede na osnovi modela baze podatkov.
Korak 1: Kliknite meni Pogled modela

2. korak: Kliknite podmeni Pogled pogleda.

3. korak: Kliknite ikono plus, da ustvarite dokument ali zapis.

4. korak: Vnesite ime albuma in ga shranite.


Podobno kot pri zgornjih korakih lahko tudi s temi pogledi izvajate vse operacije CRUD. Zato ustvarimo skladbo s pomočjo podmenija Pogled pesmi, kot je prikazano na spodnji sliki. Upoštevajte, kako je v spustnem meniju prikazano referenčno polje povezanega modela baze podatkov. Poskusite ustvariti še nekaj albumov in pesmi.

Iste koncepte lahko nadalje raziskujete z uporabo MongoAlchemy; Še en enostaven za uporabo in podoben ORM, zgrajen za enostaven dostop in upravljanje z bazami podatkov MongoDB s pomočjo Pythona.
Preverite dokumentacijo MongoAlchemy tukaj . Priporočamo pa, da sestavite osnovno razumevanje Flask-SQLAlchemy, tako da najprej preberete spodnji razdelek.
Bučka Sqlite ali Bučka MySQL
V tem razdelku smo preoblikovali enako aplikacijo za SQLAlchemy kot zaledni mehanizem. Zato izvedite vse svoje dosedanje spremembe in ustvarite ločeno vadnico podružnice Git-3-sqla. Flask lahko uporablja SQLite in MySQL kot zaledno bazo podatkov. Priporočamo, da SQLAlchemy uporabljate kot ORM s temi relacijskimi bazami podatkov.
Začnimo s spremembami, ki jih moramo izvesti, ko si ogledate novo vejo.
Konfig
Odprite config.py v korenskem imeniku projekta in odstranite niz povezave MongoDB. Posodobite config.py z nizom povezave za Flask SQLite ali Flask MySQL.
# The SQLAlchemy connection string. SQLALCHEMY_DATABASE_URI = 'sqlite:///' + os.path.join(basedir, 'app.db') # SQLALCHEMY_DATABASE_URI = 'mysql://myapp@localhost/myapp'Aplikacija __init__.py
Zdaj odprite datoteko app / __ init__.py in oddaljeni uvoz, povezan z MongoEngine, ter uvozite SQLA, kot je prikazano spodaj.
#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)Modeli bučk
Posodobite models.py z naslednjo kodo in odstranite kodo, povezano z MongoEngine.
from flask_appbuilder import Model from sqlalchemy import Column, Integer, String, ForeignKey from sqlalchemy.orm import relationshipPogledi bučke
Posodobite views.py z naslednjo kodo.
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')Upoštevajte, da smo uporabili isti razred ModelView, vendar smo spremenili MongoEngineInterface s SQLAInterface.
Če želite ustvariti tabele in njihove ustrezne odnose, izvedemo spodnji ukaz za ustvarjanje objektov baze podatkov.
flask fab create-dbNe pozabite, da smo spremenili zaledje baze podatkov. Zato uporabite ukaz bučke fab create-admin, da ustvarite skrbniškega uporabnika. Zdaj zaženite razvojni strežnik kot prej; z uporabo python run.py. Pojdite na http: // localhost: 8080.
Na tej točki bo naša aplikacija delovala, kot je delovala v primeru MongoDB. Preizkusite ga z vsemi CRUD operacijami, kot smo to storili v prejšnjih razdelkih.
Poleg tega smo med uporabo brskalnika SQLite DB prikazali obe ustrezni tabeli za modele baz podatkov.
kako odpreti datoteko json v androidu


Bučka MySQL
Če želimo uporabiti MySQL kot zaledje baze podatkov, moramo pri uporabi Flask-SQLAlchemy posodobiti samo eno konfiguracijo v zvezi z bazo podatkov v datoteki config.py.
SQLALCHEMY_DATABASE_URI = 'mysql://myapp@localhost/myapp'Glede na dani niz povezave je ime baze podatkov myapp. Uporabnik za povezavo z bazo podatkov je myapp @ localhost. Vendar sta oba predpogoja, zato bi morali ustvariti z uporabo spodnjih podrobnosti.
Zato s spodnjimi poizvedbami ustvarite uporabnika in bazo podatkov, da bo baza podatkov Flask MySQL delovala skupaj. Izvedite te poizvedbe v odjemalcu MySQL.
CREATE USER 'myapp'@'localhost' IDENTIFIED BY ''; GRANT ALL PRIVILEGES ON *.* TO 'myapp'@'localhost'; FLUSH PRIVILEGES; CREATE DATABASE myapp;Prav tako moramo namestiti Python3 mysqlclient. Namestite razvojne glave in knjižnice, kot je navedeno v spodnjih ukazih.
sudo apt-get install python3-dev default-libmysqlclient-dev build-essential pip install mysqlclientKer smo spremenili zaledje baze podatkov, moramo ustvariti tabele, ki ustrezajo modelom baze podatkov. Ustvariti moramo tudi uporabnika skrbnika Flask, saj so vsi registrirani elementi menija zaščiteni in do njih lahko dostopa samo obstoječi uporabnik v aplikaciji.
Ti spodnji ukazi skrivajo stavke SQL nižje ravni za spuščanje in ustvarjanje tabel.
flask fab create-db flask fab create-adminPo uspešnem dokončanju vseh zgornjih korakov lahko spet pridemo do http: // localhost: 8080. Zdaj odprite aplikacijo, kot smo jo dobili v primeru Flask SQLite.
Bučka preseli
Med zgodnjim razvojem aplikacije je v shemi baze podatkov veliko sprememb. Razvijalci, ki času razvoja dodajo precej stroškov, morajo te spremembe pogosto izvajati. V takih podobnih scenarijih je vtičnik Flask-Migrate zelo koristen.
Namestimo Flask-Migrate.
pip install flask-migrateOb uspešni namestitvi se doda podkanda db. S spodnjo kodo preverite pripomočke ukazne vrstice, ki so dodani v to podkomando db.
flask db --helpNajprej moramo ustvariti objekt za selitev, kot je prikazano spodaj v app / __ init__.py.
from flask import Flask from flask_migrate import Migrate app = Flask(__name__) migrate = Migrate(app, db)Preizkusimo nekaj ukazov z bazo podatkov, ki jo imamo v naši aplikaciji.
Inicializirajte ločeno skladišče za selitev.
flask db initPodobno kot zgornji ukazi obstajajo ukazi za ustvarjanje selitev in njihovo uporabo z ukazom za nadgradnjo. Te ukaze za selitev bomo uporabili kot del poteka dela v naslednjih vajah, kadar koli bo to potrebno.
Pogosto zastavljena vprašanja
Morda boste naleteli na nekatera vprašanja, povezana z uporabo baz podatkov s Flaskom.
V # 1) Katero bazo podatkov uporablja Flask?
Odgovor: Flask podpira vse zbirke podatkov, ki jih podpira SQLAlchemy, ki je zbirka orodij za Python in je ORM (Object Relation Mapper). Flask-SQLAlchemy lahko namestimo iz PyPI za delo s SQLAlchemy.
Flask-Alchemy je vtičnik Flask in razen namestitve zahteva minimalno konfiguracijo. Nekatere razširjene baze podatkov, ki jih razvijalci uporabljajo s Flask-SQLAlchemy, so SQLite, PostgreSQL, MySQL itd.
Flask ima tudi vtičnike, kot so Flask-MongoEngine, Flask-MongoAlchemy, Flask-CouchDB itd., Za delo z bazami podatkovnih baz NoSQL, kot sta MongoDB in CouchDB.
V # 2) Kako v Flasku ustvarim bazo podatkov?
Odgovor: Ustvarjanje baze podatkov v Flasku je na splošno odvisno od vzorca, ki mu sledi ustrezen vtičnik Flask. Skoraj vsi vtičniki ustvarijo baze podatkov na podlagi nastavitev povezave z bazo podatkov, določenih v konfiguraciji Flask v projektu.
Lahko pa napišete svojo lastno metodo za ustvarjanje baze podatkov v Flasku, če ne uporabljate vtičnika.
Spodaj smo podali trivialni primer ustvarjanja primera SQLite. Ta primer uporablja g Object, da ohrani referenco povezave z bazo podatkov.
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()V # 3) Kako v Flasku prikažem podatke iz baze podatkov?
Odgovor: V Flasku razvijalci uporabljajo različne Object Relational Mappers, imenovane tudi ORM. Ti ORM-ji imajo običajno API-je za dostop do baze podatkov z uporabo atributa poizvedbe za branje podatkov iz definiranega modela baze podatkov. Rezultati poizvedb, ki so shranjene v podatkovnih strukturah Pythona, se prikažejo s pomočjo predlog za bučke.
Med preskušanjem modelov baze podatkov pa lahko rezultate natisnete tudi na konzoli v lupini bučke.
Tak primer poizvedovanja po podatkih z API-jem za poizvedbe v Flask-SQLAlchemy je podan spodaj.
>>> user1 = User.query.filter_by(username='testuser').first() >>> user1.id 2 >>> user1.email u'user1@example.org'Zaključek
V tej vadnici smo obravnavali koncepte, povezane s povezovanjem v različne zbirke podatkov z isto postavitvijo projekta. Oddaljili smo se od paradigme pisanja surovih poizvedb SQL znotraj kode.
Pristop k pisanju tabel v obliki modelov nas naredi bolj gibčne. Pokrili smo tudi koncepte shranjevanja podatkov iz zbirke podatkov kot selitve. Migracije našemu razvojnemu poteku še dodajo večjo prilagodljivost.
Do zdaj smo delali na arhetipu, ki ga samodejno ustvari graditelj aplikacij Flask. V naslednjih vajah v tej seriji naredimo še en korak in razpravljamo o drugih kotlovnicah Flask in konceptih dela z načrti Flask.
=> Tukaj preverite VSE Vadnice za bučke
Priporočeno branje
- Vadnica za bučko Python - Uvod v bučko za začetnike
- Vadnica API Flask s primerom | Razširitev bučke z API-ji
- Postavitev bučke in projekt bučke z načrtom in zagonskim trakom
- 31 najbolj priljubljenih vprašanj za intervju z Python Flask z odgovori
- 10 najboljših orodij za načrtovanje zbirk podatkov za izdelavo kompleksnih podatkovnih modelov
- MongoDB Vadnica za ustvarjanje zbirke podatkov
- MongoDB Ustvari varnostno kopijo baze podatkov