flask database handling how use flask with database
In deze Flask-database-tutorial leert u Flask te gebruiken met verschillende databases, zoals Flask MySQL, Flask MongoDB, SQLite, enz.
We zullen de concepten die worden behandeld in onze eerste Flask Python-tutorial uitbreiden. We beginnen met Flask met MongoDB, een op documenten gebaseerde NoSQL-database, waarbij NoSQL staat voor Not Only SQL.
Eerst behandelen we het concept van verbinding maken met de database, en vervolgens laten we u weten hoe u niet vergrendeld raakt met één database. Indien nodig kunnen we alleen de configuraties wijzigen om de database-backend te wijzigen.
Bekijk hier de Perfect Flask-trainingsgids
Wat je leert:
Flask Database-zelfstudie
In deze tutorial kunnen lezers een vergelijking maken tussen de besproken databases. Verder praten we over Flask-MongoEngine, Flask-SQLAlchemy en Flask MongoAlchemy. Deze twee ORM's, namelijk Object Relation Mapper, zijn behoorlijk populair.
ORM's onder de motorkap vertalen de objecten (databasemodellen) transparant naar databasecommando's of SQL-statements.
De voordelen van het gebruik van een ORM worden hieronder opgesomd:
- Ontwikkelaars kunnen met objecten werken in plaats van met tabellen en SQL.
- Gebruik migraties om database-updates bij te houden.
- Het vermindert ontwikkelingskosten en tijd.
- Het overwint database-specifieke SQL-verschillen.
Bij het gebruik van ORM's hoeven de programmeurs geen complexe SQL-query's en -opdrachten te schrijven om SQL-basisopdrachten uit te voeren.
Maak verbinding met de database
Open het configuratiebestand en let op de onderstaande waarden. Flask-Appbuilder haalt de databasegegevens van de verbindingsreeks uit de genoemde waarden.
Alle low-level features van databasebeheer door de ORM zijn verpakt onder Flask Click-commando's, die we kunnen zien met behulp van flask fab -help op de commandoregel.
Kolf MongoDB
In deze sectie zullen we leren hoe we ORM's kunnen gebruiken in plaats van ruwe SQL-scripts te gebruiken om met databases in Flask te werken.
MongoDB is een niet-relationele op documenten gebaseerde database. We hebben het al geconfigureerd met onze huidige voorbeeldtoepassing voor flask-tutorials.
Gebruik de onderstaande opdrachten om de MongoDB-server op de lokale computer te beheren.
We hebben twee beroemde ORM's besproken die je kunt gebruiken met MongoDB en Flask.
Met behulp van een databaseontwerper hebben we twee tabellen gemaakt met de naam Album en Song en een een-op-veel-relatie tussen album en nummer gedefinieerd. Hieronder wordt de afbeelding weergegeven die hetzelfde afbeeldt.

Kolf MongoEngine
Laten we nu ons eerste MongoEngine DB-model maken.
Maak of bewerk het bestand models.py onder de app-directory en voeg de volgende code toe.
We hebben twee MongoEngine-modellen gemaakt: Album en Song. Deze modellen komen overeen met de respectieve documenten in MongoDB.
Album heeft één veld van het type tekenreeks met enkele beperkingen.
- Albumnaam is uniek.
- Albumnaam mag niet leeg zijn.
- De albumnaam mag maximaal honderd tekens lang zijn.
Evenzo heeft het documentnummer een titel, een beoordelingsveld en een referentieveld dat verwijst naar een ander document, Album. Laten we dit bestand opslaan en gegevens maken met behulp van deze twee modellen. Ga naar de hoofdmap van het project en gebruik het commando flask shell om toegang te krijgen tot de applicatie flask in de Python-shell.
Nadat u de shell heeft ingevoerd, gebruikt u de onderstaande instructies om toegang te krijgen tot de MongoEngine-modellen en voorbeeldgegevens te maken, zoals hieronder wordt weergegeven.
Laten we nu de database openen met de Mongo-client en kijken of gegevens worden opgeslagen als resultaat van de bovenstaande verklaringen. In de bovenstaande code importeren we eerst Album en Song en maken vervolgens hun objecten met de vereiste waarden van de parameters.
Hier zijn parameters de veldnamen zoals gedefinieerd in de modellen, en we noemen onze gegevens als waarden voor die parameters. Zodra het object is gemaakt, roepen we de opslagmethode op de respectieve objecten aan om de documenten in de database op te slaan.
Gebruik het mongo-commando om MongoDB te openen. Gebruik de onderstaande commando's als je eenmaal verbinding hebt gemaakt met de server met behulp van de mongo-client.
# 1) Controleer de lijst met databases
# 2) Gebruik onze database genaamd mydb
# 3) Controleer de verzamelingen of tabellen in RDBMS
# 4) Maak een lijst van elk document in de albumcollectie.
# 5) Maak een lijst van een document in de songverzameling.
Als je met Django hebt gewerkt, zul je je realiseren dat MongoEngine erg lijkt op Django's ingebouwde ORM. Merk in de laatste uitvoer, toen we een nummer vroegen, op hoe de referentie van een ander document voor het albumveld is.
Laten we nu nog een album maken en een update uitvoeren op het bestaande songdocument.
We importeren beide modellen, d.w.z. Album en Song. Maak vervolgens een nieuw document met de naam album2. Query Song-verzameling in de database en verkrijg de song met behulp van de titel. Vervolgens openen we het object met behulp van een array-index van het queryresultaat, werken we bij met een toewijzingsoperator en slaan we het bijgewerkte document op.
Laten we nu de Mongo-client opnieuw gebruiken om de opgeslagen collecties te controleren.
Let bij de uitvoer van de tweede query in het bovenstaande fragment op het bijgewerkte albumveld van het Song1-document.
Laten we nu de documenten in de verzameling Album en Song verwijderen. Gebruik de onderstaande code om de records te verwijderen. Als u zich nog steeds in de kolfschaal bevindt, gebruikt u de onderstaande opdrachten om een document te verwijderen en de verwijdering te verifiëren.
We gebruiken de delete-methode op song1 om het document uit de songverzameling te verwijderen. We zouden alle basis CRUD-bewerkingen kunnen uitvoeren met behulp van een kolfschaal. Verder kunnen we de ModelView-klasse van flask_appbuilder gebruiken om de databasemodellen als weergaven weer te geven.
Maak modelgebaseerde weergaven, zoals weergegeven in de onderstaande code.
We importeren eerst de databasemodellen, samen met ModelView en MongoEngineInterface. Vervolgens brengen we de ModelView in een subklasse en wijzen we bepaalde MongoEngineInterface-instanties toe aan het datamodelattribuut van onze weergaven.
.net interviewvragen en antwoorden voor ervaren
Laten we nu SongsView en AlbumView registreren met het menu zoals hieronder getoond onder dezelfde categorie.
Om toegang te krijgen tot die weergaven van de applicatie, navigeert u naar http: // localhost: 8080 /, logt u in op de app met de beheerdersreferenties en voert u de onderstaande stappen uit om de standaard op databasemodellen gebaseerde weergaven te begrijpen.
Stap 1: Klik op het menu Model View

Stap 2: Klik op het submenu Albumweergave.

Stap 3: Klik op het pluspictogram om een document of record aan te maken.

Stap 4: Voer de naam van het album in en sla het op.
Net als bij de bovenstaande stappen, kunt u alle CRUD-bewerkingen uitvoeren met deze weergaven. Laten we daarom een nummer maken met het submenu Song View, zoals weergegeven in de onderstaande afbeelding. Merk op hoe een referentieveld van een gerelateerd databasemodel wordt weergegeven in de vervolgkeuzelijst. Probeer wat meer albums en liedjes te maken.

U kunt dezelfde concepten verder verkennen met MongoAlchemy; Nog een gebruiksvriendelijke en vergelijkbare ORM die is gebouwd voor eenvoudige toegang tot en manipulatie van de MongoDB-database met Python.
Raadpleeg de documentatie van MongoAlchemy hier We raden echter aan om een basiskennis van Flask-SQLAlchemy op te bouwen door eerst het onderstaande gedeelte door te nemen.
Flask Sqlite of Flask MySQL
In deze sectie gebruiken we dezelfde applicatie voor SQLAlchemy als de backend-engine. Voer daarom al je wijzigingen tot dusver door en maak een aparte Git branch tutorial-3-sqla aan. Flask kan SQLite en MySQL gebruiken als back-enddatabase. We raden u aan om SQLAlchemy als ORM te gebruiken met deze relationele databases.
Laten we beginnen met de wijzigingen die we moeten aanbrengen nadat u een nieuwe branch heeft uitgecheckt.
Config
Open config.py in de hoofdmap van het project en verwijder de verbindingsreeks MongoDB. Werk de config.py bij met de verbindingsreeks voor Flask SQLite of Flask MySQL.
App __init__.py
Open nu het app / __ init__.py-bestand en MongoEngine-gerelateerde import op afstand en importeer SQLA zoals hieronder wordt weergegeven.
Flask-modellen
Werk models.py bij met de volgende code en verwijder de code met betrekking tot MongoEngine.
Kolf Bekeken
Werk views.py bij met de volgende code.
Merk op dat we dezelfde ModelView-klasse hebben gebruikt, maar MongoEngineInterface hebben gewijzigd met SQLAInterface.
Om de tabellen en hun bijbehorende relaties te creëren, voeren we de onderstaande opdracht uit om database-objecten te maken.
Onthoud dat we de database-backend hebben gewijzigd. Gebruik daarom de opdracht flask fab create-admin om de admin-gebruiker aan te maken. Start nu de ontwikkelserver zoals eerder; met behulp van python run.py. Navigeer naar http: // localhost: 8080.
Hier op dit punt zal onze applicatie werken zoals het werkte in het geval van MongoDB. Test het met alle CRUD-bewerkingen, zoals we in de vorige secties hebben gedaan.
Bovendien hebben we beide corresponderende tabellen voor de databasemodellen getoond tijdens het gebruik van SQLite DB Browser.


Kolf MySQL
Om MySQL als database-backend te gebruiken, als we Flask-SQLAlchemy gebruiken, hoeven we slechts één configuratie met betrekking tot de database in de config.py bij te werken.
Volgens de gegeven verbindingsreeks is de naam van de database myapp. De gebruiker om verbinding te maken met de database is myapp @ localhost. Dit zijn echter beide vereisten en we zouden moeten maken met behulp van de onderstaande details.
Gebruik daarom de onderstaande vragen om een gebruiker en een database te maken om de Flask MySQL-database met elkaar te laten samenwerken. Voer deze vragen uit in de MySQL-client.
We moeten ook Python3 mysqlclient installeren. Installeer ontwikkelheaders en bibliotheken zoals aangegeven in de onderstaande opdrachten.
Omdat we de database-backend hebben gewijzigd, moeten we tabellen maken die overeenkomen met de databasemodellen. We moeten ook een Flask admin-gebruiker aanmaken, aangezien alle geregistreerde menu-items beschermd zijn en alleen toegankelijk zijn voor een bestaande gebruiker in de applicatie.
Deze opdrachten die hieronder worden gegeven, verbergen de SQL-instructies op een lager niveau voor het neerzetten en maken van tabellen.
Na succesvolle afronding van alle bovenstaande stappen, kunnen we weer navigeren naar http: // localhost: 8080. Open nu de applicatie zoals we die hebben verkregen in het geval van Flask SQLite.
Kolf migreren
Tijdens de vroege ontwikkeling van een applicatie zijn er veel veranderingen in het schema van een database. Ontwikkelaars die nogal wat overhead aan de ontwikkeltijd toevoegen, moeten deze wijzigingen regelmatig aanbrengen. In dergelijke vergelijkbare scenario's is de Flask-Migrate-plug-in erg handig.
Laten we Flask-Migrate installeren.
Bij een succesvolle installatie wordt een db-subcommando toegevoegd. Controleer de opdrachtregelhulpprogramma's die aan dit db-subcommando zijn toegevoegd door de onderstaande code te gebruiken.
Eerst moeten we een migratieobject maken, zoals hieronder weergegeven in app / __ init__.py.
Laten we enkele commando's proberen met de database die we in onze applicatie hebben.
Initialiseer een afzonderlijke migratierepository.
Net als bij de bovenstaande opdrachten, zijn er opdrachten om migraties te maken en deze toe te passen met behulp van de upgradeopdracht. We zullen deze migratieopdrachten gebruiken als onderdeel van de workflow in onze volgende tutorials wanneer dat nodig is.
Veel Gestelde Vragen
U kunt enkele van de vragen tegenkomen die betrekking hebben op het gebruik van databases met Flask.
V # 1) Welke database gebruikt Flask?
Antwoord: Flask ondersteunt alle databases die worden ondersteund door SQLAlchemy, een database-toolkit voor Python, en een ORM (Object Relation Mapper). We kunnen Flask-SQLAlchemy installeren vanuit PyPI om met SQLAlchemy te werken.
Flask-Alchemy is een Flask-plug-in en vereist een minimale configuratie behalve de installatie ervan. Enkele van de meest voorkomende databases die ontwikkelaars gebruiken met Flask-SQLAlchemy zijn SQLite, PostgreSQL, MySQL, enz.
Flask heeft ook plug-ins zoals Flask-MongoEngine, Flask-MongoAlchemy, Flask-CouchDB, enz. Om te werken met op documenten gebaseerde NoSQL-databases zoals MongoDB en CouchDB.
Q # 2) Hoe maak ik een database aan in Flask?
Antwoord: Het maken van een database in Flask is over het algemeen afhankelijk van het patroon dat wordt gevolgd door de bijbehorende Flask-plug-in. Bijna alle plug-ins maken databases op basis van de databaseverbindingsinstellingen die zijn gedefinieerd in de Flask-configuratie in het project.
U kunt echter uw eigen methode schrijven om een database in Flask te maken wanneer u geen plug-in gebruikt.
We hebben hieronder een triviaal voorbeeld gegeven van het maken van een SQLite-voorbeeld. In dit voorbeeld wordt g Object gebruikt om de referentie van de databaseverbinding te behouden.
V # 3) Hoe geef je gegevens uit een database weer in Flask?
Antwoord: In Flask gebruiken ontwikkelaars verschillende Object Relational Mappers, ook wel ORM genoemd. Deze ORM's hebben over het algemeen API's om toegang te krijgen tot de database met behulp van het queryattribuut om de gegevens uit een gedefinieerd databasemodel te lezen. Resultaten van zoekopdrachten die zijn opgeslagen in de datastructuren van Python worden weergegeven met behulp van Flask-sjablonen.
Tijdens het testen van de databasemodellen kunnen de resultaten echter ook worden afgedrukt op de console in Flask Shell.
Een voorbeeld van het opvragen van de gegevens met behulp van de queries-API in Flask-SQLAlchemy wordt hieronder gegeven.
Gevolgtrekking
In deze zelfstudie hebben we concepten behandeld die te maken hebben met het verbinden met verschillende databases met dezelfde projectlay-out. We zijn afgestapt van het paradigma van het schrijven van onbewerkte SQL-query's in de code.
Een benadering van het schrijven van tabellen in de vorm van modellen maakt ons wendbaarder. We hebben ook de concepten van het opslaan van database-informatie als migraties besproken. Migraties voegen nog meer flexibiliteit toe aan onze ontwikkelingsworkflow.
Tot nu toe hebben we gewerkt aan een archetype dat automatisch wordt gegenereerd door de Flask app-bouwer. In onze volgende tutorials in deze serie nemen we nog een stap en bespreken we de andere Flask-boilerplaten en de concepten van het werken met Flask-blauwdrukken.
Bekijk hier ALLE Flask Tutorials
Aanbevolen literatuur
- Python Flask-zelfstudie - Inleiding tot Flask voor beginners
- Flask API-zelfstudie met voorbeeld | Kolf uitbreiden met API's
- Flask-app en Flask-projectlay-out met blauwdruk en bootstrap
- Top 31 populaire Python Flask-interviewvragen met antwoorden
- Top 10 tools voor databaseontwerp om complexe datamodellen te bouwen
- MongoDB Create Database-zelfstudie
- MongoDB Maak een databaseback-up