flask database handling how use flask with database
У овом упутству за базу података Фласк научите да користите Фласк са разним базама података, као што су Фласк МиСКЛ, Фласк МонгоДБ, СКЛите итд.
Проширићемо концепте обрађене у нашем првом водичу за Фласк Питхон. Почињемо са употребом Фласк-а са МонгоДБ, НоСКЛ базом података заснованом на документима, где НоСКЛ значи Нот Онли СКЛ.
Прво покривамо концепт повезивања са базом података, а затим вас обавештавамо како се не закључати са једном базом података. Ако је потребно, можемо изменити само конфигурације да бисмо променили позадину базе података.
=> Овде погледајте Тхе Перфецт Фласк Траининг Гуиде
Шта ћете научити:
Водич за базу података тиквица
У овом упутству читаоци могу да направе поређење између расправљаних база података. Даље, говоримо о Фласк-МонгоЕнгине, Фласк-СКЛАлцхеми и Фласк МонгоАлцхеми. Ова два ОРМ-а, тј. Мап Релатион Маппер, су прилично популарна.
које су најбоље апликације за виртуелну стварност
ОРМ-ови испод хаубе транспарентно преводе објекте (моделе базе података) у наредбе базе података или СКЛ изразе.
Предности коришћења ОРМ-а су наведене у наставку:
- Програмери могу радити са објектима уместо са табелама и СКЛ-ом.
- Користите миграције да бисте пратили ажурирања базе података.
- Смањује трошкове развоја и време.
- Превазилази СКЛ разлике специфичне за базу података.
Када користе ОРМ-е, програмери не морају писати сложене СКЛ упите и наредбе за извођење основних СКЛ наредби.
Повежите се са базом података
Отворите конфигурациону датотеку и приметите следеће вредности. Фласк-Аппбуилдер узима податке базе података о низу везе из поменутих вредности.
# The MongoEngine connection string. MONGODB_SETTINGS = { 'DB': 'mydb', 'connect': False, }
Све функције ниског нивоа управљања базом података од стране ОРМ-а умотане су под команде Фласк Цлицк, које можемо видети помоћу фаб-фаб -хелп у командној линији.
Фласк МонгоДБ
У овом одељку ћемо научити како да користимо ОРМ-ове, уместо да користимо сирове СКЛ скрипте за рад са базама података у Фласку.
МонгоДБ је нерелациона база података заснована на документима. Већ смо га конфигурисали помоћу наше тренутне примере водича за тиквицу.
Користите доле дате команде за управљање МонгоДБ сервером на локалном рачунару.
sudo systemctl start mongod # to start MongoDB sudo systemctl stop mongod # to stop MongoDB sudo systemctl status mongod # to check status MongoDB
Разговарали смо о два чувена ОРМ-а која можете да користите са МонгоДБ и Фласк.
Помоћу дизајнера базе података креирали смо две табеле назване Албум и Песма и дефинисали однос један-према-више између албума и Песме. Доље је дата слика која приказује исту.

Фласк МонгоЕнгине
Сада креирајмо наш први МонгоЕнгине ДБ модел.
Направите или уредите датотеку моделс.пи у директоријуму апликације и додајте следећи код.
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
Направили смо два модела МонгоЕнгине под називом Албум и Сонг. Ови модели одговарају одговарајућим документима у МонгоДБ-у.
Албум има једно поље типа стринг са неким ограничењима.
- Назив албума је јединствен.
- Поље за назив албума не може бити празно.
- Назив албума може садржавати највише стотину знакова.
Слично томе, документ Песма има наслов, поље за оцењивање и референтно поље које упућује на други документ, албум. Сачувајмо ову датотеку и креирајмо податке помоћу ова два модела. Идите у основни директоријум пројекта и користите команду фласк схелл да бисте приступили апликацији фласк у Питхон љусци.
Једном када уђете у љуску, користите наредбе у наставку да бисте приступили моделима МонгоЕнгине и креирали узорке података као што је приказано доле.
>>> from app.models import Album, Song >>> album1 = Album(name='Album1') >>> album1.save() >>> song1 = Song(title='Song1', rating=9, album=album1) >>> song1.save()
Сада приступимо бази података помоћу Монго клијента и видимо да ли су подаци сачувани као резултат горе датих изјава. У горњи код прво увозимо Албум и Сонг, а затим креирамо њихове објекте са потребним вредностима параметара.
Овде су параметри називи поља како су дефинисани у моделима, а своје податке спомињемо као вредности тих параметара. Једном када је стварање објекта успешно, позивамо методу чувања на одговарајућим објектима да бисмо документе сачували у бази података.
Користите команду монго за приступ МонгоДБ. Једном када се повежете са сервером помоћу монго клијента, користите наредбе у наставку.
# 1) Проверите листу база података
> show dbs #----- output ---- admin 0.000GB config 0.000GB local 0.000GB mydb 0.001GB #----- output ----
# 2) Користите нашу базу података која се зове мидб
> use mydb #----- output ---- switched to db mydb #----- output ----
# 3) Проверите табеле збирки ака РДБМС
> show collections #----- output ---- album permission permission_view role song user view_menu #----- output ----
# 4) Наведите било који документ у колекцији албума.
> db.album.findOne() #----- output ---- { '_id' : ObjectId('5eddb43b8b1e179bef87d41d'), 'name' : 'Album1' } #----- output ----
# 5) Наведите било који документ у збирци песама.
> db.song.findOne() #----- output ---- { '_id' : ObjectId('5eddb74b0177c8f096d880ec'), 'title' : 'Song1', 'rating' : 9, 'album' : ObjectId('5eddb43b8b1e179bef87d41d') } #----- output ----
Ако сте радили са Дјангом, схватићете да МонгоЕнгине ради врло слично уграђеном Дјангоовом ОРМ-у. У последњем излазу, када смо поставили упит за песму, приметите како је референца другог документа за поље албума.
Хајде сада да направимо још један албум и извршимо ажурирање постојећег документа песме.
>>> 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()
Увозимо оба модела, тј. Албум и песму. Затим креирајте нови документ под називом албум2. Упитајте збирку песама у бази података и преузмите песму користећи њен наслов. Затим приступамо објекту помоћу индекса низа резултата упита, ажурирамо помоћу оператора доделе и чувамо ажурирани документ.
Сада поново употребимо Монго клијент за проверу сачуваних колекција.
> 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') }
У излазу другог упита у горњем исечку, обратите пажњу на ажурирано поље албума документа Сонг1.
Избришимо сада документе из колекције албума и песама. Користите доњи код за уклањање записа. Ако сте још увек у љусци тиквице, користите доле наведене команде да бисте избрисали документ и верификовали брисање.
>>> song1.delete() >>> songs_q = Song.objects(title='Song1') >>> songs_q.count() 0 >>>
За брисање документа из колекције песама користимо методу делете на сонг1. Могли смо да изведемо све основне ЦРУД операције помоћу љуске тиквице. Даље, можемо користити МоделВиев класу фласк_аппбуилдер да прикажемо моделе базе података као погледе.
Креирајте погледе засноване на моделу, као што је приказано у доњем коду.
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)
Прво увозимо моделе база података, заједно са МоделВиев и МонгоЕнгинеИнтерфаце. Затим подкласирамо МоделВиев и додељујемо одређене инстанце МонгоЕнгинеИнтерфаце атрибуту модела података наших погледа.
Сада региструјмо СонгсВиев и АлбумВиев помоћу менија као што је приказано испод у истој категорији.
appbuilder.add_view(AlbumView, 'Album View', category='Model Views') appbuilder.add_view(SongsView, 'Song View', category='Model Views')
Да бисте приступили тим приказима у апликацији, идите на хттп: // лоцалхост: 8080 /, пријавите се у апликацију помоћу администраторских акредитива и извршите доленаведене кораке да бисте разумели подразумеване приказе засноване на моделу базе података.
Корак 1: Кликните на мени Приказ модела

Корак 2: Кликните на подмени „Приказ албума“.

Корак 3: Кликните на икону плус да бисте креирали документ или запис.

Корак 4: Унесите име албума и сачувајте га.
Слично горњим корацима, можете да извршите све ЦРУД операције помоћу ових приказа. Стога, креирајмо песму помоћу подменија Виев Виев, као што је приказано на доњој слици. Приметите како се референтно поље повезаног модела базе података приказује у падајућем менију. Покушајте да направите још неких албума и песама.

Можете даље истраживати исте концепте користећи МонгоАлцхеми; Још један једноставан за употребу и сличан ОРМ направљен за лак приступ МонгоДБ бази података и манипулацију помоћу Питхона.
Молимо погледајте документацију МонгоАлцхеми овде . Међутим, препоручујемо да изградите основно разумевање Фласк-СКЛАлцхеми тако што ћете прво проћи кроз одељак у наставку.
Фласк Склите или Фласк МиСКЛ
У овом одељку пренаменујемо исту апликацију за СКЛАлцхеми као и позадинску машину. Због тога вас молимо да извршите све своје досадашње промене и направите засебни Гит огранак - туториал-3-скла. Фласк може користити СКЛите и МиСКЛ као позадинску базу података. Препоручујемо вам да користите СКЛАлцхеми као ОРМ са овим релационим базама података.
Почнимо са променама које треба да унесемо након што проверите нову грану.
Цонфиг
Отворите цонфиг.пи у основном директоријуму пројекта и уклоните низ везе МонгоДБ. Ажурирајте цонфиг.пи помоћу низа везе за Фласк СКЛите или Фласк МиСКЛ.
# The SQLAlchemy connection string. SQLALCHEMY_DATABASE_URI = 'sqlite:///' + os.path.join(basedir, 'app.db') # SQLALCHEMY_DATABASE_URI = 'mysql://myapp@localhost/myapp'
Апликација __инит__.пи
Сада отворите датотеку апп / __ инит__.пи и удаљени увоз повезан са МонгоЕнгине и увезите СКЛА као што је приказано доле.
#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)
Модели боца
Ажурирајте моделс.пи следећим кодом и уклоните код повезан са МонгоЕнгине.
from flask_appbuilder import Model from sqlalchemy import Column, Integer, String, ForeignKey from sqlalchemy.orm import relationship
Фласк Виевс
Ажурирајте виевс.пи следећим кодом.
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')
Имајте на уму да смо користили исту класу МоделВиев, али смо променили МонгоЕнгинеИнтерфаце са СКЛАИнтерфаце.
Да бисмо креирали табеле и њихове одговарајуће односе, извршавамо доле поменуту наредбу за креирање објеката базе података.
flask fab create-db
Запамтите да смо променили позадину базе података. Због тога користите команду фаб цреате-админ да направите администратора. Сада покрените развојни сервер као раније; користећи питхон рун.пи. Идите на хттп: // лоцалхост: 8080.
Овде ће у овом тренутку наша апликација радити као што је радила у случају МонгоДБ. Тестирајте га са свим ЦРУД операцијама, као што смо то урадили у претходним одељцима.
Штавише, приказали смо обе одговарајуће табеле за моделе база података док смо користили СКЛите ДБ претраживач.


Фласк МиСКЛ
Да бисмо користили МиСКЛ као позадину базе података, када користимо Фласк-СКЛАлцхеми, потребно је само да ажурирамо једну конфигурацију која се тиче базе података у цонфиг.пи.
SQLALCHEMY_DATABASE_URI = 'mysql://myapp@localhost/myapp'
Према датом низу везе, име базе података је миапп. Корисник који се повезује са базом података је миапп @ лоцалхост. Међутим, и једно и друго су предуслови и требало би да креирамо користећи доленаведене детаље.
Због тога, користите доленаведене упите да бисте креирали корисника и базу података како би база података Фласк МиСКЛ радила заједно. Извршите ове упите у МиСКЛ клијенту.
CREATE USER 'myapp'@'localhost' IDENTIFIED BY ''; GRANT ALL PRIVILEGES ON *.* TO 'myapp'@'localhost'; FLUSH PRIVILEGES; CREATE DATABASE myapp;
Такође морамо да инсталирамо Питхон3 мисклцлиент. Инсталирајте развојна заглавља и библиотеке како је дато у наредбама у наставку.
sudo apt-get install python3-dev default-libmysqlclient-dev build-essential pip install mysqlclient
Сада, јер смо променили позадину базе података, морамо да креирамо табеле које одговарају моделима базе података. Такође морамо створити корисника администратора Фласк-а јер су све регистроване ставке менија заштићене и може им приступити само постојећи корисник у апликацији.
Ове наредбе дате у наставку скривају СКЛ изразе нижег нивоа за испуштање и креирање табела.
flask fab create-db flask fab create-admin
Након успешног завршетка свих горе наведених корака, поново можемо доћи до хттп: // лоцалхост: 8080. Сада приступите апликацији као што смо добили у случају Фласк СКЛите.
Преместите боцу
Током раног развоја апликације, постоје многе промене у шеми базе података. Програмери који додају прилично трошкова за време развоја морају често да уносе ове промене. У таквим сличним сценаријима додатак Фласк-Миграте је од велике помоћи.
Инсталирајмо Фласк-Миграте.
pip install flask-migrate
Након успешне инсталације додаје се дб наредба. Проверите услужне програме наредбеног ретка који су додати овој дб наредби помоћу доле споменутог кода.
flask db --help
Прво, треба да креирамо објекат за миграцију, као што је приказано доле у апликацији / __ инит__.пи.
from flask import Flask from flask_migrate import Migrate app = Flask(__name__) migrate = Migrate(app, db)
Испробајмо неке команде са базом података коју имамо у нашој апликацији.
Иницијализујте засебно спремиште за миграцију.
flask db init
Слично горњим наредбама, постоје наредбе за креирање миграција и њихову примену помоћу наредбе за надоградњу. Користићемо ове наредбе за миграцију као део тока посла у нашим наредним водичима кад год је то потребно.
Често постављана питања
Можда ћете наићи на нека од питања која се односе на употребу база података са Фласком.
П # 1) Коју базу података користи Фласк?
Одговор: Фласк подржава све базе података које подржава СКЛАлцхеми, која представља комплет алата базе података за Питхон и представља ОРМ (Објецт Релатион Маппер). Можемо инсталирати Фласк-СКЛАлцхеми из ПиПИ-а за рад са СКЛАлцхеми.
Фласк-Алцхеми је додатак за Фласк и захтева минималну конфигурацију, осим његове инсталације. Неке од најчешћих база података које програмери користе са Фласк-СКЛАлцхеми су СКЛите, ПостгреСКЛ, МиСКЛ итд.
Фласк такође има додатке као што су Фласк-МонгоЕнгине, Фласк-МонгоАлцхеми, Фласк-ЦоуцхДБ итд. За рад са НоСКЛ базама података заснованим на документима као што су МонгоДБ и ЦоуцхДБ.
П # 2) Како да креирам базу података у Фласку?
Одговор: Стварање базе података у Фласку генерално зависи од обрасца праћеног одговарајућим додатком Фласк. Готово сви додаци креирају базе података на основу подешавања везе базе података дефинисаних у конфигурацији Фласк у пројекту.
Међутим, можете да напишете сопствени метод за креирање базе података у Фласку када не користите додатак.
У наставку смо дали тривијални пример креирања примера СКЛите. Овај пример користи г Објецт да задржи референцу везе базе података.
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()
П # 3) Како у Фласку приказујете податке из базе података?
тестирајте своју веб страницу у различитим прегледачима
Одговор: У Фласку програмери користе разне Објецт Релатионал Мапперс, такође зване ОРМ. Ови ОРМ-ови обично имају АПИ-је за приступ бази података помоћу атрибута упита за читање података из дефинисаног модела базе података. Резултати упита који се чувају у Питхоновим структурама података приказују се уз помоћ Фласк Темплатес.
Међутим, током тестирања модела базе података, резултати се такође могу одштампати на конзоли у љусци тиквице.
Један такав пример испитивања података помоћу АПИ-ја за упите у Фласк-СКЛАлцхеми дат је у наставку.
>>> user1 = User.query.filter_by(username='testuser').first() >>> user1.id 2 >>> user1.email u'user1@example.org'
Закључак
У овом упутству смо обрадили концепте повезане са повезивањем на различите базе података користећи исти распоред пројеката. Удаљили смо се од парадигме писања сирових СКЛ упита унутар кода.
Приступ писању табела у облику модела чини нас спретнијима. Такође смо покрили концепте чувања података из базе података као миграције. Миграције додатно додају већу флексибилност нашем развојном току рада.
До сада смо радили на архетипу који аутоматски генерише креатор апликације Фласк. У нашим следећим водичима у овој серији, предузећемо још један корак и разговарати о осталим бојлерима Фласк и концептима рада са нацртима Фласк.
=> Овде погледајте СВЕ туторијале за тиквице
Препоручено читање
- Водич за Питхон боцу - Увод у боцу за почетнике
- Водич за Фласк АПИ са примером | Проширење тиквице помоћу АПИ-ја
- Апликација тиквица и изглед пројекта тиквице са нацртом и почетном траком
- Топ 31 популарна питања за интервју са Питхон Фласк-ом са одговорима
- 10 најбољих алата за дизајн базе података за изградњу сложених модела података
- МонгоДБ Водич за креирање базе података
- МонгоДБ Направите резервну копију базе података