Explication détaillée des exemples de connexion de Flask et de MySQL (python)

Y2J
Libérer: 2017-04-26 11:09:59
original
5652 Les gens l'ont consulté

Le quatrième article sur la naissance d'une application Web basée sur flask. Cet article présente principalement comment interconnecter flask et mysql. Il a une certaine valeur de référence. Les amis intéressés peuvent se référer à

Le chapitre 1 implémente une partie de. la fonction de connexion. La raison pour laquelle on l'appelle une fonction partielle est qu'il n'est absolument pas permis d'écrire le nom d'utilisateur et le mot de passe sous forme de valeurs fixes. Une fonction entière nécessite au moins une inscription, une connexion, une modification du mot de passe, etc., ce qui nécessite de fournir. a La possibilité de stocker ces valeurs dans la base de données.

Les bases de données grand public actuelles sont divisées en deux types, à savoir les bases de données relationnelles et les bases de données NoSql. Pour les systèmes de petite et moyenne taille, les performances et la facilité d'utilisation des deux bases de données sont équivalentes, et ce sont toutes deux de bons choix. .

Configuration de base

Ici, nous utilisons le package d'intégration flask du framework de base de données SQLAlchemy, à savoir flask-SQLAlchemy, pour effectuer des opérations de base de données.

SQLAlchemy est un très bon framework qui simplifie les opérations de base de données. Il fournit des fonctions ORM de haut niveau et SQL de bas niveau, ce qui est très pratique à utiliser.

La méthode d'installation est la même que le type précédent, ou la commande pip :

pip3.6 install flask-sqlalchemy
Copier après la connexion

Une fois l'installation terminée, modifiez la partie de configuration par défaut, importez d'abord le package :

from flask.ext.sqlalchemy import SQLAlchemy
Copier après la connexion

Configurez ensuite la chaîne de lien :

app.config["SQLALCHEMY_DATABASE_URI"]='mysql://root:1234@localhost/cblog'
Copier après la connexion

Configurez la soumission automatique des modifications une fois la demande terminée :

app.config["SQLALCHEMY_COMMIT_ON_TEARDOWN"]=True
Copier après la connexion

Instancier SQLAlchemy :

db=SQLAlchemy(app)
Copier après la connexion

Paramètres du modèle

Une fois l'installation terminée , continuez à améliorer l'exemple de connexion et modifiez le fichier default.py, ajoutez le modèle utilisateur (classe) et le modèle de rôle (pour montrer l'association)

Classe de rôle

class Role(db.Model): #需继承模型
 __tablename__="roles" #db中表明,如果不设置,则会与class同的默认名
 id=db.Column(db.Integer,primary_key=True) #SQLAlchemy要求必须有主键,一般命名为id即可
 name=db.Column(db.String(50),unique=True) #表示name为字符串,不重复
 users=db.relationship("User",backref='role') #关联user模型,并在user中添加反向引用(backref)
Copier après la connexion

Classe d'utilisateur

class User(db.Model):
 __tablename__="users"
 id=db.Column(db.Integer,primary_key=True)
 username=db.Column(db.String(50),unique=True,index=True) #此列带索引
 password=db.Column(db.String(50))
 role_id=db.Column(db.Integer,db.ForeignKey("roles.id")) #外键指向roles表中的id列
Copier après la connexion

Nous devons réfléchir à la manière de l'exécuter ci-dessous, il doit être pratique et ne peut pas envahir le code logique, ce qui nécessite qu'il ne puisse pas être codé en dur dans le code logique. Par exemple, le code pour juger la base de données. status est passé en paramètre à app.run(). À ce stade, le shell est utile

Script de configuration

Si vous souhaitez que Flask prend en charge les scripts de ligne de commande, vous devez d'abord installer l'extension flask-script :

pip3.6 install flask-script
Copier après la connexion

Modifier default.py Le code :

from flask.ext.script import Manager
mamager=Manager(app)
....
if __name__=='__main__':
 #app.run(debug=True)
 mamager.run()
Copier après la connexion

Après modification, exécutez-le à nouveau :

python default.py
Copier après la connexion

et constatez qu'il ne s'exécute pas correctement, mais il y a une invite :


Vous pouvez voir que les paramètres suivants sont requis, à savoir shell (exécuter le script), runserver (démarrer le service) et aider

Démarrez le service ci-dessous :

python default.py runserver
Copier après la connexion

Service exécuté avec succès

Plus de configurations de base de données

Mais à ce moment-là, lors de l'accès au site (127.0.0.1:5000), une erreur 500 apparaîtra, indiquant qu'il n'y a pas de module mysql, pourquoi ? Évidemment, la raison est que le pilote mysql n'est pas installé. Utilisez la commande pip pour installer le pilote :

pip3.6 install MySQL-python
Copier après la connexion

Une erreur est trouvée et le contenu affiché est (uniquement win system ici) :

Selon les invites, installez la boîte à outils C++ et suivez l'adresse de téléchargement sur les invites

landinghub.visualstudio.com/visual-cpp-build-tools

Une fois le téléchargement terminé, directement le fichier exe, installez

puis redémarrez pour installer MySQL-python. Après avoir passé par Baidu, j'ai découvert que MySQLdb. La bibliothèque ne prend en charge que jusqu'à python2.7 et ne prend plus en charge 3.x, je dois donc utiliser d'autres méthodes, utilisez la bibliothèque PyMySQL :

pip3.6 install PyMySQL
Copier après la connexion

Modifiez ensuite le code de default.py. et ajoutez deux lignes :

import pymysql
pymysql.install_as_MySQLdb()
Copier après la connexion

Entrez le code source et faites attention à cette ligne :

sys.modules["MySQLdb"] = sys.modules["_mysql"] = sys.modules["pymysql"]
Copier après la connexion

pour réussir à utiliser et à vous connecter à MySQL .
Entrez la connexion dans le navigateur et entrez correctement sur le site.

Ensuite, utilisez le shell pour créer la table de base de données et entrez dans le répertoire racine de default.py :

python default.py shell
from default import db
db.create_all()
Copier après la connexion

Si aucune erreur n'est signalée à ce niveau temps, alors la table de base de données devrait être Création terminée :


Migration de la base de données

Ensuite, le problème vient , à ce stade, modifier le modèle ne sera pas reflété dans la base de données, alors que dois-je faire si je le modifie ? Pour l'instant, c'est aussi très simple :

db.drop_all()
db.create_all()
Copier après la connexion

Mais cela n'est utilisé que pour le débogage maintenant. S'il y a déjà des données dans la base de données, ce sera certainement insupportable à ce moment-là. de la base de données Le plug-in de migration Migrate est ici. La première chose est toujours la même. Il faut l'installer :

pip3.6 install flask-migrate
Copier après la connexion

Comme avant, après l'installation, modifiez le fichier default.py pour la configuration :

from flask.ext.migrate import Migrate,MigrateCommand
migrate=Migrate(app,db) #配置迁移
mamager.add_command("db",MigrateCommand) #配置迁移命令
Copier après la connexion

Utilisez ensuite la commande init pour initialiser l'entrepôt de migration

 python default.py db init
Copier après la connexion

La ligne de commande affiche :


Ajoutez ensuite le répertoire migrations :

indique que le fichier de migration a été initialisé.

migrate框架提供了一些命令来进行迁移操作,分别为(使用default.py文件举例):

#根据差异创建迁移
python default.py db migrate -m "说明"
#改动差异 
python default.py db upgrade
#取消差异改动
python default.py db downgrade
Copier après la connexion

回到表单

接下来看看登录如何与数据库关联起来,修改login方法内的代码:

@app.route("/login",methods=["POST"])
def loginPost():
 username=request.form.get("username","")
 password=request.form.get("password","")
 user=User.query.filter_by(username=username,password=password).first() #数据库查询
 if user is not None:
 session["user"]=username
 return render_template("/index.html",name=username,site_name='myblog')
 else:
 flash("您输入的用户名或密码错误")
 return render_template("/login.html") #返回的仍为登录页
Copier après la connexion

执行结果非常完美。

一些总结

下面是一些关于python和db相连的总结性的东西

数据类型

列选项

数据库操作

查询过滤器

经过这几章,登录功能已经基本完成,在下一章中将讲解用户注册的相关功能。

Ce qui précède est le contenu détaillé de. pour plus d'informations, suivez d'autres articles connexes sur le site Web de PHP en chinois!

Étiquettes associées:
source:php.cn
Déclaration de ce site Web
Le contenu de cet article est volontairement contribué par les internautes et les droits d'auteur appartiennent à l'auteur original. Ce site n'assume aucune responsabilité légale correspondante. Si vous trouvez un contenu suspecté de plagiat ou de contrefaçon, veuillez contacter admin@php.cn
Tutoriels populaires
Plus>
Derniers téléchargements
Plus>
effets Web
Code source du site Web
Matériel du site Web
Modèle frontal