• flask系列四之SQLAlchemy


    一、SQLAlchemy简介

    (1)flask_sqlalchemy是一套ORM框架。

    (2)ORM(Object Relationship Mapping):模型关系映射

    (3)ORM的好处:可以让我们操作数据库跟操作类的对象一样。一个表可以抽象成一个类,一条数据可以抽象成该类的一个对象。

    数据库表:article

    进行ORM(模型关系映射)之后:

    class Article(Model):
        # 属性对应数据中的字段
        id = Int()
        title = String() 
        content = Text()
    
    # 添加一条数据,就是实例化一个类的对象 
    article1 = Article(id = 1, title = 'who', content = 'No way!')
    add(article1)
    

    二、SQLAlchemy连接数据库

    1. 初始化和设置数据库配置信息:

    使用flask_sqlalchemy中的SQLAlchemy进行初始化:

     from flask_sqlalchemy import SQLAlchemy
            app = Flask(__name__)
            db = SQLAlchemy(app)

    2.设置配置信息:在config.py文件中添加以下配置信息:

    import os
    
    DEBUG = True
    SECRET_KEY = os.urandom(24)
    DIALECT = 'mysql'
    DRIVER = 'pymysql'
    USERNAME = 'root'
    PASSWORD = '123456'
    HOST = 'localhost'
    PORT = '3306'
    DATABASE = 'zhiliao'
    SQLALCHEMY_DATABASE_URI = "{}+{}://{}:{}@{}:{}/{}?charset=utf8".format(DIALECT, DRIVER, USERNAME, PASSWORD, HOST, PORT, DATABASE)
    
    SQLALCHEMY_TRACK_MODIFICATIONS = False

    3. 在主app文件中,添加配置文件:

    app = Flask(__name__)
        app.config.from_object(config)
        db = SQLAlchemy(app)

    4. 做测试,看有没有问题:

     db.create_all()

    如果没有报错,说明配置没有问题,如果有错误,可以根据错误进行修改

    综合代码如下:

    from flask import Flask
    from flask_sqlalchemy import SQLAlchemy
    import config
    
    app = Flask(__name__)
    app.config.from_object(config)
    db = SQLAlchemy(app)
    
    # 执行下面这句如果没有问题就算连接数据库成功
    db.create_all()
    
    @app.route('/')
    def hello_world():
        return 'Hello World!'
    
    if __name__ == '__main__':
        app.run(debug=True)

    三、SQLAlchemy模型与表映射

    注意:

    1,.模型需要继承自db.Model,然后需要映射到表中的属性,必须写成db.Column的数据类型。

    2.数据类型: 

    (1)db.Integer代表的是整形.

    (2)db.String代表的是varchar,需要指定最长的长度。

    (3)db.Text代表的是text

    3.其他参数: 

    (1)primary_key:代表的是将这个字段设置为主键。

    (2)autoincrement:代表的是这个主键为自增长的。

    (3)nullable:代表的是这个字段是否可以为空,默认可以为空,可以将这个值设置为False,在数据库中,这个值就不能为空了。

    最后需要调用db.create_all来将模型真正的创建到数据库中。

    python的ORM代码

    model.py

    from exts import db
    from datetime import datetime
    
    # 首先继承自db.Model
    class User(db.Model):
        __tablename__ = 'user' #指定一个表名
        id=db.Column(db.Integer,primary_key=True, autoincrement=True)
        telephone=db.Column(db.String(11), nullable=False)
        username=db.Column(db.String(50), nullable=False)
        password=db.Column(db.String(100), nullable=False)
        confirmPassword = db.Column(db.String(100), nullable=False)
    exts.py
    from flask_sqlalchemy import SQLAlchemy
    
    db = SQLAlchemy()

    实例: 

    selfprojectName.py中

    from flask import Flask
    from flask_sqlalchemy import SQLAlchemy
    import config
    
    app = Flask(__name__)
    app.config.from_object(config)
    db = SQLAlchemy(app)
    
    
    # 创建一个article表,ORM中一个表对应一个类
    class Article(db.Model):
        __tablename__ = 'article' # 指定一个表名
        id = db.Column(db.Integer, primary_key=True, autoincrement=True)
        title = db.Column(db.String(100), nullable=False)
        content = db.Column(db.Text, nullable=False)
    
    db.create_all()
    
    @app.route('/')
    def hello_world():
        return 'Hello World!'
    
    if __name__ == '__main__':
        app.run(debug=True)

    config.py中是与连接数据库的相关配置:

    import os
    
    DEBUG = True
    SECRET_KEY = os.urandom(24)
    DIALECT = 'mysql'
    DRIVER = 'pymysql'#python3需要的
    USERNAME = 'root'
    # PASSWORD = 'root'
    PASSWORD = '123456'
    HOST = 'localhost'
    PORT = '3306'
    DATABASE = 'zhiliao'
    SQLALCHEMY_DATABASE_URI = "{}+{}://{}:{}@{}:{}/{}?charset=utf8".format(DIALECT, DRIVER, USERNAME, PASSWORD, HOST, PORT, DATABASE)
    
    SQLALCHEMY_TRACK_MODIFICATIONS = False
    
    

    四、SQLAlchemy数据表增删改查

    1.增

    userObj = User(telephone=telephone, username=username, password=password,confirmPassword=confirmPassword)
                    db.session.add(userObj)
              # 事务
                    db.session.commit()

    2.查

    查出来的是Query类型的数据,相当于list类型的数据。

     user = User.query.filter(User.telephone == telephone).first()

    注意:User为类

    3.改

    # 改:
        # 1. 先把你要更改的数据查找出来
        user =User.query.filter(User.telephone == 'xxxx').first()
        # 2. 把这条数据,你需要修改的地方进行修改
        user.username= 'new_username'
        # 3. 做事务的提交
        db.session.commit()

    4.删

     #
        # 1. 把需要删除的数据查找出来
        user=User.query.filter(User.telephone== 'xxxx').first()
        # 2. 把这条数据删除掉
        db.session.delete(user)
        # 3. 做事务提交
        db.session.commit()

    注意:上述的增删改查是针对类的查询然后针对对象的操作,所以需要把model导入

     

     
  • 相关阅读:
    iOS:后台定位并实时向服务器发送位置
    iOS:创建Siri 功能
    Cocoa编程开发者手册
    iOS应用开发最佳实践
    Linux Shell编程与编辑器使用详解
    从虚拟化到云计算
    软件集成策略——如何有效率地提升质量
    水色物语:清新水彩手绘插画技法
    易用为王:改进产品设计的10个策略
    iOS Web应用开发:运用HTML5、CSS3与JavaScript
  • 原文地址:https://www.cnblogs.com/wfaceboss/p/8476621.html
Copyright © 2020-2023  润新知