• SQLAlchemy


    1. SQLAlchemy介绍

      SQLAlchemy是一个基于Python实现的ORM框架,能满足大多数数据库操作需求,同时支持多种数据库引擎(SQLite,MySQL,Postgresql,Oracle等)

      SQLAlchemy组件中最有名的是它的对象关系映射器(ORM)

      ORM 将数据库中的表与面向对象语言中的类建立了一种对应关系

      ORM将一个Python的对象映射为数据库中的一张关系表。它将SQL封装起来,程序员不再需要关心数据库的具体操作,只需要专注于自己本身代码和业务逻辑的实现

      对数据表的抽象,允许开发人员首先考虑数据模型,同时使得Python程序更加简洁易读。
      对各种数据库引擎的封装,使得开发人员在面对不同数据库时,只需要做简单修改即可,工作量大大减少。

      整体的实现过程就是:Python代码,通过ORM转换成SQL语句,再通过pymysql去实际操作数据库,最典型的ORM就是我们的SQLAlchemy

    2.使用

      SQLAlchemy本身无法操作数据库,必须依赖pymsql等第三方插件。根据配置文件的不同调用不同的数据库API,从而实现对数据库的操作

    MySQL-Python
        mysql+mysqldb://<user>:<password>@<host>[:<port>]/<dbname>
        
    pymysql
        mysql+pymysql://<username>:<password>@<host>/<dbname>[?<options>]
        
    MySQL-Connector
        mysql+mysqlconnector://<user>:<password>@<host>[:<port>]/<dbname>
        
    cx_Oracle
        oracle+cx_oracle://user:pass@host:port/dbname[?key=value&key=value...]
        

    其他可参考此处:http://docs.sqlalchemy.org/en/latest/dialects/index.html

     2.1 flask-sqlalchemy

      常见我们需要下载一个 Flask-SQLAlchemy扩展包

    官方文档链接:猛戳此处

    from flask import Flask
    from flask_sqlalchemy import SQLAlchemy
    
    app = Flask(__name__)
    
    # 数据库类型://用户名:密码(没有密码则为空,不填)@数据库主机地址/数据库名?编码
    DB_URL = 'mysql+pymysql://root:@localhost/test?charset=utf8'
    
    # 添加到全局配制中,这步必学要有
    app.config['SQLALCHEMY_DATABASE_URI'] = DB_URL
    app.config['SQLALCHEMY_TRACK_MODIFICATIONS'] = False
    
    db = SQLAlchemy(app)
    
    
    class Parent(db.Model):
        __tablename__ = 'parent'
        id = db.Column(db.Integer, primary_key=True)
        par_name = db.Column(db.String(50), nullable=False)
        children = db.relationship("Child", backref="parent")
       # 在父表类中通过relationship() 方法来引用子表的类集合
       # 当我们需要在父表中添加子表关系时使用 relationship,这样子表将会在多对一的关系中通过.parent的方式获得父表的属性
    
    
    class Child(db.Model):
        __tablename__ = 'child'
        id = db.Column(db.Integer, primary_key=True)
        child_name = db.Column(db.String(50), nullable=False)
        parent_id = db.Column(db.Integer, db.ForeignKey('parent.id'))
        # 在子表类中通过 foreign key (外键)引用父表的参考字段
    
    
    # db.drop_all()         #删除表
    # db.create_all()       #创建表
    
    
    # 添加数据
    # par1 = Parent(par_name='爸爸1')
    # par2 = Parent(par_name='爸爸2')
    # chi = Child(child_name='儿子1',parent_id=2)
    
    # db.session.add(par1)
    # db.session.add(par2)
    # db.session.add(chi)
    # db.session.commit()
    
    
    # 查看数据
    # par =Parent.query.all()
    # print(par)  # [<Parent 1>, <Parent 2>]
    
    # chi = Child.query.filter(Child.parent_id).first().child_name
    # print(chi)  # 儿子1
    
    
    # 修改数据
    # chi = Child.query.filter(Child.parent_id).first()
    # chi.child_name = "好儿子"
    # db.session.commit()     # 刷新数据库,可以看见数据已经更新
    
    
    # 删除数据
    # par =Parent.query.filter(Parent.id==1).first()
    # db.session.delete(par)
    # db.session.commit()     # 刷新数据库,id=1的数据已经不存在
    
    
    @app.route('/')
    def hello_world():
        return 'Hello World!'
    
    if __name__ == '__main__':
        app.run(port=5050)

    最终的效果

    也可参考本篇博文:博文链接

    详细操作参考:博文链接

     进阶阅读:参考知乎链接

  • 相关阅读:
    python用requests请求,报SSL:CERTIFICATE_VERIFY_FAILED错误。
    动态语言,静态语言,强类型定义语言,弱类型定义语言
    Tensorflow学习教程简单练一波,线性模型
    Tensorflow学习教程利用卷积神经网络对mnist数据集进行分类_训练模型
    Tensorflow学习教程tensorboard网络运行和可视化
    Tensorflow学习教程softmax简单介绍
    Tensorflow学习教程非线性回归
    Tensorflow学习教程代价函数
    Tensorflow学习教程普通神经网络对mnist数据集分类
    Tensorflow学习教程利用卷积神经网络对mnist数据集进行分类_利用训练好的模型进行分类
  • 原文地址:https://www.cnblogs.com/LearningOnline/p/9672709.html
Copyright © 2020-2023  润新知