• Flask 数据库 SQLAlchemy


    Python 版本: 3.7.8

    用 Pycharm 开发工具,新建项目,设置安装以下包:

    1) Flask

    2) Flask-SQLAchemy

    3) PyMySql

    ###  Flask-SQLAlchemy 的介绍与安装:


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

    2.  flask-sqlalchemy 是一套 ORM 框架

    3.  ORM 的优势:简单方便地操作数据库,和操作对象类似。一个表抽象成一个类,一条数据抽象成该类的一个对象。

    4.  安装 flask-sqlalchemy

    ### Flask-SQLAlchemy 的使用:


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

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

    1 from flask_sqlalchemy import SQLAlchemy
    2 import config
    3 
    4 app = Flask(__name__)
    5 app.config.from_object(config)
    6 db = SQLAlchemy(app)

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

     1 # dialect+driver://username:password@host:port/database
     2 DIALECT = 'mysql'
     3 DRIVER = 'pymysql'  # 驱动程序在 python2 中是 mysqldb 
     4 USERNAME = 'pydev'
     5 PASSWORD = 'syjinsari'
     6 HOST = '192.168.0.110'
     7 PORT = '3306'
     8 DATABASE = 'py_demo'
     9 
    10 SQLALCHEMY_DATABASE_URI = '{}+{}://{}:{}@{}:{}/{}?charset=utf8'.format(DIALECT,DRIVER,USERNAME,PASSWORD,HOST,PORT,DATABASE)
    11 
    12 SQLALCHEMY_TRACK_MODIFICATIONS = False

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

    1 app = Flask(__name__)
    2 app.config.from_object(config)
    3 db = SQLAlchemy(app)

    4.  测试连接,成功或者报错:

    '''
    db.create_all()
    '''

    连接失败可能来自多种原因,例如:

    1)服务器防火墙把 3306 端口关闭了。

    2)没有创建过用户,或者用户无法远程登录。

    ###  使用 Flask-SQLAlchemy 创建模型与表的映射:


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

    2.  数据类型:db.Integer  db.String  db.Text

       其他参数:  primary_key  autoincrement  nullable

    3.  最后调用  `db.create_all() 将模型真正创建到数据库中

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

    ### 数据增删改查


     1 # 增:
     2 article1 = Article(title='1st aaa',content='this is aaa')
     3 db.session.add(article1)
     4 # 事务
     5 db.session.commit()
     6 
     7 #
     8 # select * from article where article.title = '1st aaa'
     9 article1 = Article.query.filter(Article.title == '1st aaa').first()
    10 print('title: %s' % article1.title)
    11 print('content: %s' % article1.content)
    12 
    13 #
    14 # 1. 查到需要更改的行  2. 更改数据 3. 提交事务
    15 article1 = Article.query.filter(Article.title == '1st aaa').first()
    16 article1.title = 'new aaa'
    17 db.session.commit()
    18 
    19 
    20 #
    21 # 1. 查到需要删除的行   2. 删除   3. 提交事务
    22 article1 = Article.query.filter(Article.title == 'new aaa').first()
    23 db.session.delete(article1)
    24 db.session.commit()
  • 相关阅读:
    [leetcode]259. 3Sum Smaller 三数之和小于目标值
    题型总结之K Sum
    [Leetcode]167. Two Sum II
    题型总结之Sliding Window
    [Leetcode]703. Kth Largest Element in a Stream 数据流中的第 K 大元素
    [Leetcode]307. Range Sum Query
    pycharm同一目录下无法import明明已经存在的.py文件
    python高级特性:迭代器与生成器
    self的含义,为什么类调用方法时需要传参数?
    git三:远程仓库GitHub
  • 原文地址:https://www.cnblogs.com/e1st/p/13380648.html
Copyright © 2020-2023  润新知