Maison > Article > développement back-end > Exemple de la façon dont flask_sqlalchemy exploite la base de données en python
Ce que cet article vous apporte est un exemple de la façon dont flask_sqlalchemy exploite une base de données en python. Il a une certaine valeur de référence. Les amis dans le besoin peuvent s'y référer.
flask_sqlalchemy
Utilise le framework Object-Relational Mapper (ORM), qui résume les instructions d'opération de base de données de bas niveau en opérations orientées objet de haut niveau. En d'autres termes, si nous utilisons directement le moteur de base de données, nous devons écrire des instructions d'opération SQL, mais si nous utilisons le framework ORM, nous pouvons simplifier le fonctionnement des entités de base de données telles que les tables et les documents dans des objets Python
SQLAlchemy est devenu le standard pour ORM dans le monde Python. Flask est un framework Web léger qui peut être utilisé librement avec ORM. Flask-sqlalchemy est un plug-in spécialement conçu pour Flask.
Dans Flask-SQLAlchemy, la base de données est spécifiée à l'aide d'une URL.
MySQL --> mysql://username:password@hostname/database
Installation
pip install flask-sqlalchemy
Opération de base de données
1. Comment créer une connexion d'opération de base de données
from flask import Flask from flask_sqlalchemy import SQLAlchemy app = Flask(__name__) db = SQLAlchemy(app) app.config['SQLALCHEMY_DATABASE_URI'] = 'mysql+pymysql://root:sheen@localhost/zaj_sql' app.config['SQLALCHEMY_TRACK_MODIFICATIONS'] = True class User(db.Model): id = db.Column(db.Integer, primary_key=True) username = db.Column(db.String(80), unique=True) email = db.Column(db.String(120), unique=True)
Pour créer la base de données initiale, appelez la méthode SQLAlchemy.create_all() pour créer les tables et la base de données :
db.create_all()
Votre base de données a été générée. Créons maintenant quelques utilisateurs
admin = User('admin', 'admin@example.com') guest = User('guest', 'guest@example.com')
mais ils n'ont pas encore été écrits dans la base de données, alors assurons-nous qu'ils le sont
db.session.add(admin) db.session.add(guest) db.session.commit()
2. Créez un compte relationnel table de base de données
SQLAlchemy se connecte à une base de données relationnelle. La meilleure chose à propos des données relationnelles, ce sont les relations. Par conséquent, nous allons créer une application en utilisant deux tables liées comme exemple.
La relation la plus courante est la relation un-à-plusieurs. Étant donné que les relations sont déclarées avant d'être établies, vous pouvez utiliser des chaînes pour faire référence à des classes qui n'ont pas encore été créées.
Les relations sont représentées à l'aide de la fonction relation(). Cependant, les clés étrangères doivent être déclarées séparément à l'aide de la classe sqlalchemy.schema.ForeignKey
from datetime import datetime from flask_bootstrap import Bootstrap from flask_wtf import FlaskForm from flask_sqlalchemy import SQLAlchemy from flask import Flask import pymysql from sqlalchemy import desc app = Flask(__name__) db = SQLAlchemy(app) app.config['SQLALCHEMY_DATABASE_URI'] = 'mysql+pymysql://root:sheen@localhost/zaj_sql' app.config['SQLALCHEMY_TRACK_MODIFICATIONS'] = True bootstrap = Bootstrap(app) class User(db.Model): id = db.Column(db.Integer,autoincrement=True,primary_key=True) name = db.Column(db.String(50),unique=True) passwd = db.Column(db.String(100)) add_time = db.Column(db.DATETIME,default=datetime.now()) gender = db.Column(db.BOOLEAN,default=True) role_id = db.Column(db.INTEGER,db.ForeignKey('role.id')) def __repr__(self): return '<user:>' %(self.name) class Role(db.Model): id = db.Column(db.INTEGER,autoincrement=True,primary_key=True) name = db.Column(db.String(50),unique=True) users = db.relationship('User',backref='role') # 给Role模型添加users属性 # backref 是定义反向引用 def __repr__(self): return '<role:>' % (self.name) if __name__ =='__main__': # 1. 创建数据库表 # db.drop_all() # db.create_all() # # 2. 创建role数据库表数据 role_1 = Role(name='超级会员') role_2 = Role(name='普通会员') db.session.add(role_1) db.session.add(role_2) db.session.commit() # # # 3. 添加user表内数据,100个用户,50个为超级会员,50个为普通会员 for i in range(1,13): if i%2 == 0: u = User(name='sheen'+str(i),passwd='sheen',role_id=1) db.session.add(u) else: u = User(name='star'+str(i),passwd='star',role_id=2) db.session.add(u) db.session.commit()</role:></user:>
backref définit une référence arrière et peut accéder aux objets et propriétés de rôle via User.role.
Interroger toutes les données
print('角色',Role.query.all()) print('用户',User.query.all())
Interroger les données en fonction des conditions
# select * from tablename where xxx=xxxxx print(User.query.filter_by(role_id=1).all()) print(Role.query.filter_by().all()) print(User.query.filter_by(role_id=2).all())
Mettre à jour les données trouvées
print('进行数据更新',end='\n') u =User.query.filter_by(name='sheen2').first() print(u) u.passwd = '123' db.session.add(u) db.session.commit()
Méthode de filtrage des données 2 (filtre), cette méthode peut voir l'instruction SQL native
print('数据筛选', end='\n') user = User.query.filter(User.role_id==1) print(user)
Limiter l'affichage des informations interrogées
print('限制查询数据的显示', end='\n') users = User.query.filter_by(role_id=1).limit(3).all() print(users)
Trier et afficher les informations interrogées (par défaut, trier du petit au grand), si vous le souhaitez Du grand trop petit : desc(User.add_time)
print('数据再处理', end='\n') users = User.query.filter_by(role_id=1).order_by(desc(User.name)).all() print(users)
Fonctions de filtrage multiples
print('多个过滤函数', end='\n') users = User.query.filter_by(role_id=1).order_by(desc(User.name)).limit(3).offset(1).all() print(users) users = User.query.filter_by(role_id=1).order_by(desc(User.name)).slice(1,4).all() print(users)
Paging, le premier paramètre représente quelle page de données est affichés ? Le deuxième paramètre indique combien de données sont affichées sur chaque page
print('分页显示', end='\n') users = User.query.paginate(1,5) print(users.items) users = User.query.paginate(2, 5) print(users.items)
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!