flask database handling how use flask with database
W tym samouczku dotyczącym bazy danych Flask naucz się używać Flask z różnymi bazami danych, takimi jak Flask MySQL, Flask MongoDB, SQLite itp.
Rozszerzymy koncepcje omówione w naszym pierwszym samouczku Flask Python. Zaczynamy od użycia Flask z MongoDB, bazą danych NoSQL opartą na dokumentach, gdzie NoSQL oznacza nie tylko SQL.
Najpierw omawiamy koncepcję łączenia się z bazą danych, a następnie informujemy, jak nie zablokować się w jednej bazie danych. W razie potrzeby możemy modyfikować tylko konfiguracje, aby zmienić zaplecze bazy danych.
=> Sprawdź przewodnik szkoleniowy Perfect Flask tutaj
Czego się nauczysz:
najlepsza aplikacja szpiegowska na Androida
Samouczek dotyczący bazy danych Flask
W tym samouczku czytelnicy mogą narysować porównanie między omawianymi bazami danych. Ponadto mówimy o Flask-MongoEngine, Flask-SQLAlchemy i Flask MongoAlchemy. Te dwa ORMy, czyli Object Relation Mapper, są dość popularne.
ORMy pod maską w przejrzysty sposób tłumaczą obiekty (modele bazy danych) na polecenia bazy danych lub instrukcje SQL.
Zalety korzystania z ORM są wymienione poniżej:
- Programiści mogą pracować z obiektami zamiast z tabelami i SQL.
- Użyj migracji, aby śledzić aktualizacje bazy danych.
- Zmniejsza koszty i czas rozwoju.
- Eliminuje różnice SQL specyficzne dla bazy danych.
Korzystając z ORM, programiści nie muszą pisać skomplikowanych zapytań SQL i poleceń, aby wykonywać podstawowe polecenia SQL.
Połącz się z bazą danych
Otwórz plik konfiguracyjny i zwróć uwagę na wymienione poniżej wartości. Flask-Appbuilder pobiera szczegóły bazy danych dotyczące parametrów połączenia z wymienionych wartości.
# The MongoEngine connection string. MONGODB_SETTINGS = { 'DB': 'mydb', 'connect': False, }
Wszystkie niskopoziomowe funkcje zarządzania bazą danych przez ORM zostały zawarte w poleceniach Flask Click, które możemy zobaczyć używając flask fab –help w linii poleceń.
Kolba MongoDB
W tej sekcji dowiemy się, jak używać ORMów zamiast używać surowych skryptów SQL do pracy z bazami danych w Flask.
MongoDB to nierelacyjna baza danych oparta na dokumentach. Skonfigurowaliśmy go już za pomocą naszego aktualnego samouczka aplikacji flask.
Użyj poniższych poleceń, aby zarządzać serwerem MongoDB na komputerze lokalnym.
sudo systemctl start mongod # to start MongoDB sudo systemctl stop mongod # to stop MongoDB sudo systemctl status mongod # to check status MongoDB
Omówiliśmy dwa słynne ORM-y, których można używać z MongoDB i Flask.
Korzystając z projektanta bazy danych, utworzyliśmy dwie tabele o nazwie Album i Utwór oraz zdefiniowaliśmy relację jeden do wielu między albumem i utworem. Podano poniżej obraz przedstawiający to samo.

Flask MongoEngine
Teraz stwórzmy nasz pierwszy model MongoEngine DB.
Utwórz lub edytuj plik models.py w katalogu aplikacji i dodaj następujący kod.
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
Stworzyliśmy dwa modele MongoEngine o nazwie Album i Song. Modele te odpowiadają odpowiednim dokumentom w MongoDB.
Album ma jedno pole typu string z pewnymi ograniczeniami.
- Nazwa albumu jest unikalna.
- Nazwa albumu nie może być pusta.
- Nazwa albumu może mieć maksymalnie sto znaków.
Podobnie dokument Song ma tytuł, pole oceny i pole odniesienia, które wskazuje na inny dokument, Album. Zapiszmy ten plik i utwórzmy dane przy użyciu tych dwóch modeli. Przejdź do katalogu głównego projektu i użyj polecenia flask shell, aby uzyskać dostęp do aplikacji flask w powłoce Pythona.
Po wejściu do powłoki użyj poniższych instrukcji, aby uzyskać dostęp do modeli MongoEngine i utwórz przykładowe dane, jak pokazano poniżej.
>>> from app.models import Album, Song >>> album1 = Album(name='Album1') >>> album1.save() >>> song1 = Song(title='Song1', rating=9, album=album1) >>> song1.save()
Teraz przejdźmy do bazy danych za pomocą klienta Mongo i zobaczmy, czy dane są zapisywane w wyniku powyższych instrukcji. W powyższym kodzie najpierw importujemy Album i Song, a następnie tworzymy ich obiekty z wymaganymi wartościami parametrów.
Tutaj parametry to nazwy pól zdefiniowane w modelach, a nasze dane wymieniamy jako wartości tych parametrów. Po pomyślnym utworzeniu obiektu wywołujemy metodę save na odpowiednich obiektach, aby zapisać dokumenty w bazie danych.
Użyj polecenia mongo, aby uzyskać dostęp do bazy danych MongoDB. Po połączeniu się z serwerem za pomocą klienta mongo użyj poniższych poleceń.
# 1) Sprawdź listę baz danych
> show dbs #----- output ---- admin 0.000GB config 0.000GB local 0.000GB mydb 0.001GB #----- output ----
# 2) Skorzystaj z naszej bazy danych o nazwie mydb
> use mydb #----- output ---- switched to db mydb #----- output ----
# 3) Sprawdź kolekcje, a.k.a tabele w RDBMS
> show collections #----- output ---- album permission permission_view role song user view_menu #----- output ----
# 4) Wymień dowolny dokument w kolekcji albumów.
> db.album.findOne() #----- output ---- { '_id' : ObjectId('5eddb43b8b1e179bef87d41d'), 'name' : 'Album1' } #----- output ----
# 5) Wymień dowolny dokument w kolekcji piosenek.
> db.song.findOne() #----- output ---- { '_id' : ObjectId('5eddb74b0177c8f096d880ec'), 'title' : 'Song1', 'rating' : 9, 'album' : ObjectId('5eddb43b8b1e179bef87d41d') } #----- output ----
Jeśli pracowałeś z Django, zdasz sobie sprawę, że MongoEngine działa bardzo podobnie do wbudowanego ORM Django. W ostatnim wyjściu, kiedy pytaliśmy o piosenkę, zwróć uwagę, jak odniesienie do innego dokumentu dotyczy pola albumu.
Teraz utwórzmy kolejny album i zaktualizujmy istniejący dokument utworu.
>>> 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()
Importujemy oba modele tj. Album i Song. Następnie utwórz nowy dokument o nazwie album2. Przeszukaj kolekcję utworów w bazie danych i pobierz utwór, używając jego tytułu. Następnie uzyskujemy dostęp do obiektu za pomocą indeksu tablicy wyników zapytania, aktualizujemy za pomocą operatora przypisania i zapisujemy zaktualizowany dokument.
Teraz ponownie użyjmy klienta Mongo, aby sprawdzić przechowywane kolekcje.
> 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') }
W wyniku drugiego zapytania w powyższym fragmencie zwróć uwagę na zaktualizowane pole albumu w dokumencie Song1.
Teraz usuńmy dokumenty w kolekcji albumów i utworów. Użyj poniższego kodu, aby usunąć rekordy. Jeśli nadal jesteś w powłoce kolby, użyj poniższych poleceń, aby usunąć dokument i zweryfikować usunięcie.
>>> song1.delete() >>> songs_q = Song.objects(title='Song1') >>> songs_q.count() 0 >>>
Używamy metody delete w utworze song1, aby usunąć dokument z kolekcji piosenek. Mogliśmy wykonać wszystkie podstawowe operacje CRUD używając powłoki kolby. Ponadto możemy użyć klasy ModelView klasy flask_appbuilder, aby wyświetlić modele bazy danych jako widoki.
Utwórz widoki oparte na modelu, jak pokazano w poniższym kodzie.
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)
Najpierw importujemy modele bazy danych wraz z ModelView i MongoEngineInterface. Następnie tworzymy podklasę ModelView i przypisujemy poszczególne instancje MongoEngineInterface do atrybutu modelu danych naszych widoków.
Teraz zarejestrujmy SongsView i AlbumView za pomocą menu pokazanego poniżej w tej samej kategorii.
appbuilder.add_view(AlbumView, 'Album View', category='Model Views') appbuilder.add_view(SongsView, 'Song View', category='Model Views')
Aby uzyskać dostęp do tych widoków w aplikacji, przejdź do http: // localhost: 8080 /, zaloguj się do aplikacji przy użyciu poświadczeń administratora i wykonaj poniższe kroki, aby zrozumieć domyślne widoki oparte na modelu bazy danych.
Krok 1: Kliknij menu Widok modelu

Krok 2: Kliknij podmenu Widok albumu.

Krok 3: Kliknij ikonę plusa, aby utworzyć dokument lub rekord.

Krok 4: Wprowadź nazwę albumu i zapisz go.
element znajdowania selenu według selektora css
Podobnie jak w powyższych krokach, możesz wykonywać wszystkie operacje CRUD przy użyciu tych widoków. Dlatego stwórzmy piosenkę za pomocą podmenu Song View, jak pokazano na poniższym obrazku. Zwróć uwagę, jak pole odniesienia powiązanego modelu bazy danych jest wyświetlane w menu rozwijanym. Spróbuj utworzyć więcej albumów i utworów.

Możesz dalej badać te same koncepcje, używając MongoAlchemy; Kolejny łatwy w użyciu i podobny ORM zbudowany w celu łatwego dostępu do bazy danych MongoDB i manipulowania nią za pomocą Pythona.
Sprawdź dokumentację MongoAlchemy tutaj . Jednak zalecamy zbudowanie podstawowej wiedzy na temat Flask-SQLAlchemy, przechodząc najpierw przez poniższą sekcję.
Flask Sqlite lub Flask MySQL
W tej sekcji ponownie wykorzystujemy tę samą aplikację dla SQLAlchemy, co silnik zaplecza. Dlatego prosimy o zatwierdzenie wszystkich dotychczasowych zmian i utworzenie osobnej gałęzi Git tutorial-3-sqla. Flask może używać SQLite i MySQL jako wewnętrznej bazy danych. Zalecamy używanie SQLAlchemy jako ORM z tymi relacyjnymi bazami danych.
Zacznijmy od zmian, które musimy wprowadzić po wyewidencjonowaniu nowego oddziału.
Config
Otwórz plik config.py w katalogu głównym projektu i usuń parametry połączenia z MongoDB. Zaktualizuj plik config.py, wpisując parametry połączenia dla Flask SQLite lub Flask MySQL.
# The SQLAlchemy connection string. SQLALCHEMY_DATABASE_URI = 'sqlite:///' + os.path.join(basedir, 'app.db') # SQLALCHEMY_DATABASE_URI = 'mysql://myapp@localhost/myapp'
Aplikacja __init__.py
Teraz otwórz plik app / __ init__.py i zdalne importy związane z MongoEngine i zaimportuj SQLA, jak pokazano poniżej.
#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)
Modele kolb
Zaktualizuj models.py następującym kodem i usuń kod związany z MongoEngine.
from flask_appbuilder import Model from sqlalchemy import Column, Integer, String, ForeignKey from sqlalchemy.orm import relationship
Widoki kolb
Zaktualizuj views.py następującym kodem.
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')
Zauważ, że użyliśmy tej samej klasy ModelView, ale zmieniliśmy MongoEngineInterface z SQLAInterface.
Aby utworzyć tabele i odpowiadające im relacje, wykonujemy poniższe polecenie, aby utworzyć obiekty bazy danych.
flask fab create-db
Pamiętaj, że zmieniliśmy zaplecze bazy danych. Dlatego użyj polecenia flask fab create-admin, aby utworzyć administratora. Teraz uruchom serwer deweloperski jak wcześniej; używając Pythona run.py. Przejdź pod adres http: // localhost: 8080.
Tutaj w tym momencie nasza aplikacja będzie działać tak, jak działała w przypadku MongoDB. Przetestuj to ze wszystkimi operacjami CRUD, tak jak to zrobiliśmy w poprzednich sekcjach.
Ponadto pokazaliśmy obie odpowiednie tabele dla modeli baz danych podczas korzystania z przeglądarki SQLite DB Browser.


Flask MySQL
Aby używać MySQL jako zaplecza bazy danych, kiedy używamy Flask-SQLAlchemy, wystarczy zaktualizować jedną konfigurację dotyczącą bazy danych w config.py.
SQLALCHEMY_DATABASE_URI = 'mysql://myapp@localhost/myapp'
Zgodnie z podanymi parametrami połączenia nazwa bazy danych to myapp. Użytkownik łączący się z bazą danych to myapp @ localhost. Jednak oba te są warunkami wstępnymi i powinniśmy tworzyć, korzystając ze szczegółów podanych poniżej.
Dlatego użyj podanych poniżej zapytań, aby utworzyć użytkownika i bazę danych, aby baza danych Flask MySQL działała w połączeniu. Wykonaj te zapytania w kliencie MySQL.
CREATE USER 'myapp'@'localhost' IDENTIFIED BY ''; GRANT ALL PRIVILEGES ON *.* TO 'myapp'@'localhost'; FLUSH PRIVILEGES; CREATE DATABASE myapp;
Musimy również zainstalować Python3 mysqlclient. Zainstaluj nagłówki programistyczne i biblioteki, jak podano w poniższych poleceniach.
sudo apt-get install python3-dev default-libmysqlclient-dev build-essential pip install mysqlclient
Teraz, ponieważ zmieniliśmy zaplecze bazy danych, musimy utworzyć tabele odpowiadające modelom bazy danych. Musimy również utworzyć administratora Flask, ponieważ wszystkie zarejestrowane elementy menu są chronione i mogą być dostępne tylko dla istniejącego użytkownika w aplikacji.
Poniższe polecenia ukrywają instrukcje SQL niższego poziomu służące do usuwania i tworzenia tabel.
flask fab create-db flask fab create-admin
Po pomyślnym wykonaniu wszystkich powyższych kroków możemy ponownie przejść do adresu http: // localhost: 8080. Teraz uzyskaj dostęp do aplikacji, tak jak otrzymaliśmy w przypadku Flask SQLite.
Flask Migrate
Na wczesnym etapie tworzenia aplikacji następuje wiele zmian w schemacie bazy danych. Deweloperzy, którzy znacznie wydłużają czas programowania, muszą często wprowadzać te zmiany. W takich podobnych scenariuszach wtyczka Flask-Migrate jest bardzo pomocna.
Zainstalujmy Flask-Migrate.
pip install flask-migrate
Po pomyślnej instalacji dodawana jest podkomenda db. Sprawdź narzędzia wiersza polecenia, które zostały dodane do tej podkomendy db, używając poniższego kodu.
flask db --help
Najpierw musimy utworzyć obiekt do migracji, jak pokazano poniżej w app / __ init__.py.
from flask import Flask from flask_migrate import Migrate app = Flask(__name__) migrate = Migrate(app, db)
Wypróbujmy kilka poleceń z bazą danych, którą mamy w naszej aplikacji.
Zainicjuj oddzielne repozytorium migracji.
flask db init
Podobnie jak w przypadku powyższych poleceń, istnieją polecenia służące do tworzenia migracji i ich stosowania za pomocą polecenia uaktualnienia. W razie potrzeby będziemy używać tych poleceń migracji jako części przepływu pracy w naszych kolejnych samouczkach.
Często Zadawane Pytania
Możesz napotkać niektóre pytania związane z korzystaniem z baz danych w Flasku.
Pytanie 1) Z jakiej bazy danych korzysta Flask?
Odpowiedź: Flask obsługuje wszystkie bazy danych obsługiwane przez SQLAlchemy, który jest zestawem narzędzi bazodanowych dla języka Python i jest ORM (Object Relation Mapper). Możemy zainstalować Flask-SQLAlchemy z PyPI do pracy z SQLAlchemy.
Flask-Alchemy to wtyczka Flask, wymagająca minimalnej konfiguracji poza instalacją. Niektóre z najpopularniejszych baz danych, których programiści używają z Flask-SQLAlchemy, to SQLite, PostgreSQL, MySQL itp.
Flask ma również wtyczki, takie jak Flask-MongoEngine, Flask-MongoAlchemy, Flask-CouchDB itp. Do pracy z bazami danych NoSQL, takimi jak MongoDB i CouchDB.
P # 2) Jak utworzyć bazę danych w Flask?
Odpowiedź: Tworzenie bazy danych w Flask jest generalnie zależne od wzorca, po którym następuje odpowiednia wtyczka Flask. Prawie wszystkie wtyczki tworzą bazy danych w oparciu o ustawienia połączenia z bazą danych zdefiniowane w konfiguracji Flask w projekcie.
najlepsza aplikacja do zarządzania projektami na iPhone'a
Możesz jednak napisać własną metodę tworzenia bazy danych w Flasku, gdy nie używasz wtyczki.
Poniżej podajemy trywialny przykład tworzenia przykładu SQLite. W tym przykładzie użyto obiektu g, aby zachować odwołanie do połączenia z bazą danych.
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()
P # 3) Jak wyświetlić dane z bazy danych w Flasku?
Odpowiedź: We Flask programiści używają różnych obiektów mapowania relacyjnego, zwanych także ORM. Te ORM mają zazwyczaj interfejsy API umożliwiające dostęp do bazy danych za pomocą atrybutu zapytania do odczytywania danych ze zdefiniowanego modelu bazy danych. Wyniki zapytań przechowywanych w strukturach danych Pythona są wyświetlane za pomocą szablonów Flask.
Jednak podczas testowania modeli bazy danych wyniki można również wydrukować na konsoli w Flask Shell.
Jeden z takich przykładów odpytywania danych przy użyciu interfejsu API zapytań we Flask-SQLAlchemy jest podany poniżej.
>>> user1 = User.query.filter_by(username='testuser').first() >>> user1.id 2 >>> user1.email u'user1@example.org'
Wniosek
W tym samouczku omówiliśmy koncepcje związane z łączeniem się z różnymi bazami danych przy użyciu tego samego układu projektu. Odeszliśmy od paradygmatu pisania surowych zapytań SQL w kodzie.
Podejście do pisania tabel w formie modeli czyni nas bardziej zwinnymi. Omówiliśmy również koncepcje przechowywania informacji z bazy danych jako migracji. Migracje dodatkowo zwiększają elastyczność naszego przepływu pracy związanej z programowaniem.
Do tej pory pracowaliśmy nad archetypem, który jest automatycznie generowany przez kreator aplikacji Flask. W naszych następnych samouczkach z tej serii zrobimy jeszcze jeden krok i omówimy inne schematy Flask oraz koncepcje pracy z planami Flask.
=> Sprawdź WSZYSTKIE samouczki dotyczące kolb tutaj
rekomendowane lektury
- Python Flask Tutorial - Wprowadzenie do Flask dla początkujących
- Samouczek interfejsu Flask API z przykładem | Rozszerzanie Flask z API
- Aplikacja Flask i układ projektu Flask z Blueprint i Bootstrap
- 31 najpopularniejszych pytań do wywiadów z Python Flask z odpowiedziami
- 10 najlepszych narzędzi do projektowania baz danych do tworzenia złożonych modeli danych
- Samouczek dotyczący tworzenia bazy danych MongoDB
- MongoDB Utwórz kopię zapasową bazy danych