flask database handling how use flask with database
В този урок за база данни на Flask се научете да използвате Flask с различни бази данни, като Flask MySQL, Flask MongoDB, SQLite и др.
Ще разширим концепциите, обхванати в нашия първи урок за Flask Python. Започваме с Flask с MongoDB, базирана на документи NoSQL база данни, където NoSQL означава Not Only SQL.
Първо, ние обхващаме концепцията за свързване с базата данни и след това ви уведомяваме как да не се заключвате с една база данни. Ако е необходимо, можем да модифицираме само конфигурациите, за да променим бекенда на базата данни.
=> Вижте Ръководството за обучение на Perfect Flask тук
Какво ще научите:
Урок за база данни за колби
В този урок читателите могат да направят сравнение между обсъжданите бази данни. Освен това говорим за Flask-MongoEngine, Flask-SQLAlchemy и Flask MongoAlchemy. Тези две ORMs, т.е. Map Relation Mapper, са доста популярни.
ORM под капака прозрачно превеждат обектите (модели на база данни) в команди на база данни или SQL изрази.
Ползите от използването на ORM са изброени по-долу:
- Разработчиците могат да работят с обекти вместо с таблици и SQL.
- Използвайте миграции, за да следите актуализациите на базата данни.
- Намалява разходите за разработка и времето.
- Той преодолява специфичните за базата данни SQL разлики.
Когато използват ORM, програмистите не трябва да пишат сложни SQL заявки и команди, за да изпълняват базови SQL команди.
Свържете се с базата данни
Отворете конфигурационния файл и забележете посочените по-долу стойности. Flask-Appbuilder взема подробностите за базата данни за низа на връзката от споменатите стойности.
# The MongoEngine connection string. MONGODB_SETTINGS = { 'DB': 'mydb', 'connect': False, }
Всички функции на ниско ниво на управление на база данни от ORM са обхванати от команди Flask Click, които можем да видим с помощта на flask fab –help в командния ред.
Колба MongoDB
В този раздел ще научим как да използваме ORM, вместо да използваме сурови SQL скриптове за работа с бази данни в Flask.
MongoDB е нерелационна база данни, базирана на документи. Вече сме го конфигурирали с нашето приложение за текущ урок на урок.
как да добавите maven в затъмнение -
Използвайте командите по-долу, за да управлявате сървъра MongoDB на локалната машина.
sudo systemctl start mongod # to start MongoDB sudo systemctl stop mongod # to stop MongoDB sudo systemctl status mongod # to check status MongoDB
Обсъдихме две известни ORM, които можете да използвате с MongoDB и Flask.
Използвайки дизайнер на база данни, създадохме две таблици, наречени Албум и Песен, и дефинирахме връзка едно към много между Албум и Песен. Дадено по-долу е изображението, изобразяващо същото.
Колба MongoEngine
Сега нека създадем първия си модел DB на MongoEngine.
Създайте или редактирайте файла models.py в директорията на приложението и добавете следния код.
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
Създадохме два модела MongoEngine, наречени Албум и Песен. Тези модели съответстват на съответните документи в MongoDB.
Албумът има едно поле от тип низ с някои ограничения.
- Името на албума е уникално.
- Името на албума не може да бъде празно.
- Името на албума може да съдържа максимум сто знака.
По същия начин документът Song има заглавие, поле за оценка и поле за справка, което сочи към друг документ, Албум. Нека запазим този файл и да създадем данни, използвайки тези два модела. Отидете в основната директория на проекта и използвайте командата flask shell за достъп до приложението flask в обвивката на Python.
След като въведете черупката, използвайте инструкциите по-долу за достъп до моделите MongoEngine и създайте примерни данни, както е показано по-долу.
>>> from app.models import Album, Song >>> album1 = Album(name='Album1') >>> album1.save() >>> song1 = Song(title='Song1', rating=9, album=album1) >>> song1.save()
Сега нека да осъществим достъп до базата данни с помощта на клиент на Mongo и да видим дали данните се записват в резултат на изявленията, дадени по-горе. В горния код първо импортираме Албум и Песен, след което създаваме техните обекти с необходимите стойности на параметрите.
Тук параметрите са имената на полетата, както са дефинирани в моделите, и ние споменаваме нашите данни като стойности на тези параметри. След като създаването на обект е успешно, извикваме метода save на съответните обекти, за да запазим документите в базата данни.
Използвайте командата mongo за достъп до MongoDB. След като се свържете със сървъра с помощта на клиента mongo, използвайте командите по-долу.
# 1) Проверете списъка с бази данни
> show dbs #----- output ---- admin 0.000GB config 0.000GB local 0.000GB mydb 0.001GB #----- output ----
# 2) Използвайте нашата база данни, наречена mydb
> use mydb #----- output ---- switched to db mydb #----- output ----
# 3) Проверете колекциите, известни като таблици в RDBMS
> 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 ----
Ако сте работили с Django, тогава ще разберете, че MongoEngine работи много подобно на вградения ORM на Django. В последния изход, когато потърсихме песен, забележете как препратката към друг документ е за полето на албума.
Сега нека създадем друг албум и изпълним актуализация на съществуващия документ за песента.
>>> 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()
Внасяме и двата модела, т.е. Албум и Песен. След това създайте нов документ, наречен album2. Заявете колекция от песни в базата данни и вземете песента, използвайки нейното заглавие. След това осъществяваме достъп до обекта, използвайки индекс на масив на резултата от заявката, актуализираме с помощта на оператор за присвояване и запазваме актуализирания документ.
Сега нека използваме Mongo клиент отново, за да проверим съхранените колекции.
> 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') }
В изхода на втората заявка в горния фрагмент забележете актуализираното поле на албума на документа Song1.
Сега нека изтрием документите както в колекцията Албум, така и в Песента. Използвайте кода по-долу, за да премахнете записите. Ако все още сте в обвивката на колбата, използвайте посочените по-долу команди, за да изтриете документ и да проверите изтриването.
>>> song1.delete() >>> songs_q = Song.objects(title='Song1') >>> songs_q.count() 0 >>>
Използваме метода delete на song1, за да изтрием документа от колекцията от песни. Можем да изпълняваме всички основни CRUD операции с помощта на черупка на колбата. Освен това можем да използваме класа ModelView на flask_appbuilder, за да покажем моделите на базата данни като изгледи.
Създайте изгледи, базирани на модел, както е показано в кода по-долу.
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)
Първо импортираме моделите на базата данни, заедно с ModelView и MongoEngineInterface. След това подкласираме ModelView и присвояваме конкретни екземпляри MongoEngineInterface на атрибута на модела на данни на нашите възгледи.
Сега нека регистрираме SongsView и AlbumView с менюто, както е показано по-долу, в същата категория.
appbuilder.add_view(AlbumView, 'Album View', category='Model Views') appbuilder.add_view(SongsView, 'Song View', category='Model Views')
За да осъществите достъп до тези изгледи на приложението, отворете http: // localhost: 8080 /, влезте в приложението с помощта на администраторските идентификационни данни и изпълнете посочените по-долу стъпки, за да разберете изгледите, базирани на модела на база данни по подразбиране.
Етап 1: Щракнете върху менюто Изглед на модел
Стъпка 2: Щракнете върху подменю Преглед на албума.
Стъпка 3: Щракнете върху иконата плюс, за да създадете документ или запис.
Стъпка 4: Въведете името на албума и го запазете.
Подобно на горните стъпки, можете да извършвате всички CRUD операции, като използвате тези изгледи. Затова нека създадем песен, като използваме подменюто View View, както е показано на изображението по-долу. Забележете как се показва референтното поле на свързан модел на база данни в падащото меню. Опитайте да създадете още няколко албума и песни.
Можете допълнително да изследвате същите концепции, използвайки MongoAlchemy; Друг лесен за използване и подобен ORM, създаден за лесен достъп и манипулация на база данни MongoDB с помощта на Python.
Моля, проверете документацията на MongoAlchemy тук . Препоръчваме обаче да изградите основно разбиране за Flask-SQLAlchemy, като първо преминете през долния раздел.
Flask Sqlite или Flask MySQL
В този раздел ние преназначваме същото приложение за SQLAlchemy като вътрешния механизъм. Следователно, моля, ангажирайте всичките си промени досега и създайте отделен урок за клонове на Git-3-sqla. Flask може да използва SQLite и MySQL като база данни. Препоръчваме ви да използвате SQLAlchemy като ORM с тези релационни бази данни.
Нека започнем с промените, които трябва да направим, след като разгледате нов клон.
изтеглете висококачествен звук от youtube
Конфигуриране
Отворете config.py в основната директория на проекта и премахнете низа за свързване на MongoDB. Актуализирайте config.py с низа за свързване за Flask SQLite или Flask MySQL.
# The SQLAlchemy connection string. SQLALCHEMY_DATABASE_URI = 'sqlite:///' + os.path.join(basedir, 'app.db') # SQLALCHEMY_DATABASE_URI = 'mysql://myapp@localhost/myapp'
Приложение __init__.py
Сега отворете файла app / __ init__.py и отдалечен импорт, свързан с MongoEngine, и импортирайте SQLA, както е показано по-долу.
#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)
Модели на колби
Актуализирайте models.py със следния код и премахнете кода, свързан с MongoEngine.
from flask_appbuilder import Model from sqlalchemy import Column, Integer, String, ForeignKey from sqlalchemy.orm import relationship
Flask Views
Актуализирайте views.py със следния код.
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')
Имайте предвид, че използвахме същия клас ModelView, но променихме MongoEngineInterface със SQLAInterface.
За да създадем таблиците и съответните им връзки, изпълняваме споменатата по-долу команда за създаване на обекти на база данни.
flask fab create-db
Не забравяйте, че сме променили бекенда на базата данни. Затова използвайте командата fab create-admin, за да създадете потребителя на администратор. Сега стартирайте сървъра за разработка както по-рано; използвайки python run.py. Отидете до http: // localhost: 8080.
Тук на този етап нашето приложение ще работи както е работило в случая с MongoDB. Изпробвайте го с всички CRUD операции, както направихме в предишните раздели.
Освен това показахме и двете съответстващи таблици за моделите на базата данни, докато използвахме SQLite DB Browser.
Колба MySQL
За да използваме MySQL като бекенд на базата данни, когато използваме Flask-SQLAlchemy, трябва да актуализираме само една конфигурация относно базата данни в config.py.
SQLALCHEMY_DATABASE_URI = 'mysql://myapp@localhost/myapp'
Според дадения низ за връзка името на базата данни е myapp. Потребителят, който се свързва с базата данни, е myapp @ localhost. И двете са обаче предпоставки и трябва да създадем, като използваме подробностите, дадени по-долу.
Следователно, използвайте заявките, дадени по-долу, за да създадете потребител и база данни, за да накарате базата данни Flask MySQL да работи заедно помежду си. Изпълнете тези заявки в MySQL клиент.
CREATE USER 'myapp'@'localhost' IDENTIFIED BY ''; GRANT ALL PRIVILEGES ON *.* TO 'myapp'@'localhost'; FLUSH PRIVILEGES; CREATE DATABASE myapp;
Също така трябва да инсталираме Python3 mysqlclient. Инсталирайте заглавки и библиотеки за разработка, както е дадено в командите по-долу.
sudo apt-get install python3-dev default-libmysqlclient-dev build-essential pip install mysqlclient
Сега, тъй като сме променили бекенда на базата данни, трябва да създадем таблици, съответстващи на моделите на базата данни. Също така трябва да създадем потребител на администратор на Flask, тъй като всички регистрирани елементи от менюто са защитени и могат да бъдат достъпни само от съществуващ потребител в приложението.
Тези команди, дадени по-долу, скриват SQL изразите от по-ниско ниво за отпадане и създаване на таблиците.
flask fab create-db flask fab create-admin
При успешно завършване на всички стъпки по-горе, можем отново да отидем до http: // localhost: 8080. Сега влезте в приложението, както го получихме в случая на Flask SQLite.
Миграция на колба
По време на ранното разработване на приложение има много промени в схемата на база данни. Разработчиците, които добавят доста допълнителни разходи към времето за разработка, трябва често да правят тези промени. В подобни подобни сценарии приставката Flask-Migrate е доста полезна.
Нека инсталираме Flask-Migrate.
pip install flask-migrate
При успешна инсталация се добавя db подкоманда. Проверете помощните програми на командния ред, които са добавени към тази db подкоманда, като използвате посочения по-долу код.
flask db --help
Първо, трябва да създадем обект за мигриране, както е показано по-долу в app / __ init__.py.
from flask import Flask from flask_migrate import Migrate app = Flask(__name__) migrate = Migrate(app, db)
Нека опитаме някои команди с базата данни, която имаме в нашето приложение.
Инициализирайте отделно хранилище за миграция.
flask db init
Подобно на горните команди, има команди за създаване на миграции и прилагането им с помощта на командата за надстройка. Ще използваме тези команди за мигриране като част от работния процес в следващите ни уроци, когато е необходимо.
често задавани въпроси
Може да срещнете някои от въпросите, свързани с използването на бази данни с Flask.
В # 1) Каква база данни използва Flask?
Отговор: Flask поддържа всички бази данни, които се поддържат от SQLAlchemy, която е набор от инструменти за база данни за Python и е ORM (Object Relation Mapper). Можем да инсталираме Flask-SQLAlchemy от PyPI, за да работим със SQLAlchemy.
Flask-Alchemy е приставка за Flask и изисква минимална конфигурация, различна от инсталацията. Някои от разпространените бази данни, които разработчиците използват с Flask-SQLAlchemy, са SQLite, PostgreSQL, MySQL и др.
Flask също има приставки като Flask-MongoEngine, Flask-MongoAlchemy, Flask-CouchDB и др., За да работи с базирани на документи NoSQL бази данни като MongoDB и CouchDB.
В # 2) Как да създам база данни в Flask?
Отговор: Създаването на база данни в Flask обикновено зависи от модела, последван от съответния плъгин Flask. Почти всички приставки създават бази данни въз основа на настройките за свързване на базата данни, дефинирани в конфигурацията на Flask в проекта.
Можете обаче да напишете свой собствен метод за създаване на база данни в Flask, когато не използвате приставка.
По-долу сме дали тривиален пример за създаване на пример за SQLite. Този пример използва g Object, за да запази препратката към връзката с базата данни.
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) Как показвате данни от база данни в Flask?
Отговор: В Flask разработчиците използват различни Object Relational Mappers, наричани още ORM. Тези ORM обикновено имат API за достъп до базата данни, използвайки атрибута на заявката, за да четат данните от дефиниран модел на база данни. Резултатите от заявки, които се съхраняват в структурите за данни на Python, се показват с помощта на шаблони за колби.
Въпреки това, докато тествате моделите на базата данни, резултатите могат да бъдат отпечатани и на конзолата в Flask Shell.
Един такъв пример за заявка на данни с помощта на API за заявки в Flask-SQLAlchemy е даден по-долу.
>>> user1 = User.query.filter_by(username='testuser').first() >>> user1.id 2 >>> user1.email u'user1@example.org'
Заключение
В този урок разгледахме концепции, свързани със свързването към различни бази данни, използвайки едно и също оформление на проекта. Отдалечихме се от парадигмата на писане на сурови SQL заявки вътре в кода.
Подходът към писането на таблици под формата на модели ни прави по-пъргави. Също така обхванахме концепциите за съхраняване на информация от базата данни като миграции. Миграциите допълнително добавят повече гъвкавост към нашия работен процес за разработка.
Досега работихме върху архетип, който се генерира автоматично от конструктора на приложения Flask. В следващите уроци от тази поредица, ние правим още една стъпка и обсъждаме другите бойлерни плочи на Flask и концепциите за работа с чертежи на Flask.
=> Проверете ВСИЧКИ уроци за колби тук
Препоръчително четене
- Урок за Python Flask - Въведение в Flask за начинаещи
- Урок за API на Flask с пример | Разширяване на колбата с API
- Flask App и Flask Project Layout с Blueprint & Bootstrap
- Топ 31 популярни въпроса за интервю с Python Flask с отговори
- Топ 10 Инструменти за проектиране на бази данни за изграждане на сложни модели данни
- MongoDB Създаване на урок за база данни
- MongoDB Създаване на резервно копие на база данни