flask_sqlalchemy简单用法

Posted

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了flask_sqlalchemy简单用法相关的知识,希望对你有一定的参考价值。

说明

??SQLAlchemy 是 Python 的 ORM 框架,它的理念是:数据库的量级和性能重要于对象集合,而对象集合的抽象又重要于表和行

1、安装

    python: 3.6
    flask: 1.0.2
    flask_sqlalchemy: 2.3.2
  环境windows pycharm
    安装 -- 点击 file -- settings -- project py -- project interpreter 点击+号
    需要安装:pymysql   flask   flask_sqlalchemy

2、文件结构

??技术分享图片

2.1、数据库连接

1、conf.ini文件

[db]
NAME=test               # 数据库帐号
PASSWD=test          # 数据库密码
IPADDR=192.168.9.224  #连接地址
PORT=3306             # 端口
DATABASE=test      # 数据库

2、model.py文件   用于连接数据库

# Flask类是flask框架的核心类,它实现了wsgi应用规范
from flask import  Flask
# 引用SQLAlchemy
from flask_sqlalchemy import SQLAlchemy

import configparser

# 打开文件并获取文件
cf=configparser.ConfigParser()
cf.read("conf.ini")
NAME = cf.get(‘db‘,‘NAME‘)
PASSWD = cf.get(‘db‘,‘PASSWD‘)
IPADDR = cf.get(‘db‘,‘IPADDR‘)
DATABASE = cf.get(‘db‘,‘DATABASE‘)

# 新建app对象
app = Flask(__name__)
# 加载配置信息,其中有数据库的配置信息,包含在SQLALCHEMY_DATABASE_URI中
app.config[‘SQLALCHEMY_DATABASE_URI‘] = "mysql+pymysql://%s:%[email protected]%s/%s"%(NAME, PASSWD, IPADDR, DATABASE)
# 调试信息,如果不开会报错,true会占用内存
app.config[‘SQLALCHEMY_TRACK_MODIFICATIONS‘] = True
# 将创建的flask框架与工程所需要使用的数据库绑定到一起,
db = SQLAlchemy(app)

# 如果定义在上面会因为db参数还没有创建,直接引会的话会报错
# 1、如果你打算在该文件引用User类,请保证全局引用
# 2、无论放在哪里,至少要在db = SQLAlchemy(app)执行后,生成db对象才能进行引用,否则会导致model.py文件执行错误。
from createtb import CreateTb

# 手动创建函数,以便初始化数据
def  db_init():
    db.create_all()

# 最后还需要执行初始化函数
db_init()

2.2、创建表文件

1、createtb.py
# 引入model文件中的db函数
from model import db

class CreateTb(db.Model):
    __tablename__ = ‘createtb‘
    id = db.Column(db.Integer, primary_key=True, autoincrement=True)
    name = db.Column(db.String(30),unique=True)
    addr = db.Column(db.String(30),unique=True)

    def __init__(self, name, addr):
        self.name = name
        self.addr = addr

    #为以后调试输出提供接口
    def __repr__(self):
        return ‘<name %r>‘ % self.name

db.Column说明
    Integer 存储整数
    String(size)    存储有长度的字符串
    unique  唯一键
    autoincrement  自动增长
    primary_key 主键

2.3、启动

1、start.py 用于打开web站点,并创建数据库

from model import app

# 路由至首页,显示hello flask
@app.route(‘/‘)
def hello():
    return "hello flask"

#启动app 
if __name__ == ‘__main__‘:
    app.run()
    app.debug = True

2.4、最终效果

启动start.py
技术分享图片

web查看效果
技术分享图片

查看db

mysql> show tables;
+----------------+
| Tables_in_test |
+----------------+
| createtb       |
+----------------+

mysql> desc createtb;
    +-------+-------------+------+-----+---------+----------------+
    | Field | Type        | Null | Key | Default | Extra          |
    +-------+-------------+------+-----+---------+----------------+
    | id    | int(11)     | NO   | PRI | NULL    | auto_increment |
    | name  | varchar(30) | YES  | UNI | NULL    |                |
    | addr  | varchar(30) | YES  | UNI | NULL    |                |
    +-------+-------------+------+-----+---------+----------------+
    3 rows in set (0.00 sec)

3、增删查

# 引用model文件, createtb已经引入到model文件中了 如果在引用createtb就会重复运行。
from model import CreateTb,db

# 查询全部
for user in CreateTb.query.all():
    print(user.id, user.name, user.pwd)

"""
    1 xiong1 123456
    2 xiong2 123456
    3 xiong3 123456
"""

# 精确查询
# u = CreateTb.query.filter_by(name=‘xiong1‘).first()
# print(u.pwd)

# 模糊查询
# for pwd in CreateTb.query.filter(User.pwd.ilike(‘%123%‘)).all():
#     print(pwd.pwd, pwd.name)

# update   更新操作
# 解释起来就是首先将对象查询出来,然后将修改的字段赋值,并将查询出的对象提交到数据库,这样更新操作就结束了。
# u = CreateTb.query.filter_by(name=‘xiong1‘).first()
# u.pwd = 321123
# db.session.add(u)
# db.session.commit()

# delete
u = CreateTb.query.filter_by(name=‘xiong1‘).first()
db.session.delete(u)
db.session.commit()

4、参考文档

??flask-sqlalchemy快速入门 - sqlachemy增删查 - 安装步骤说明特别细的

最后附上代码密码:z6r0

以上是关于flask_sqlalchemy简单用法的主要内容,如果未能解决你的问题,请参考以下文章

Flask(flask_sqlalchemy)使用原生sql,多个数据库用法进行封装

python flask_Sqlalchemy管理数据库

深入浅出Flask(47):flask_sqlalchemy的应用动态绑定

使用 flask_sqlalchemy 将 HTML 表单中的日期插入 SQlite 数据库

深入浅出Flask(46):flask_sqlalchemy的简单关系

深入浅出Flask(52):flask_sqlalchemy的同时连接多个数据库