Maison  >  Article  >  développement back-end  >  Exemple de la façon dont flask_sqlalchemy exploite la base de données en python

Exemple de la façon dont flask_sqlalchemy exploite la base de données en python

不言
不言avant
2018-11-15 14:06:294602parcourir

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.
Exemple de la façon dont flask_sqlalchemy exploite la base de données en python

Exemple de la façon dont flask_sqlalchemy exploite la base de données en python

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())

Exemple de la façon dont flask_sqlalchemy exploite la base de données en python

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()

Exemple de la façon dont flask_sqlalchemy exploite la base de données en python

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)

Exemple de la façon dont flask_sqlalchemy exploite la base de données en python

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)

Exemple de la façon dont flask_sqlalchemy exploite la base de données en python

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)

Exemple de la façon dont flask_sqlalchemy exploite la base de données en python

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!

Déclaration:
Cet article est reproduit dans:. en cas de violation, veuillez contacter admin@php.cn Supprimer