前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
工具
TVP
发布
社区首页 >专栏 >Flask(数据库和模型 十)

Flask(数据库和模型 十)

作者头像
zx钟
发布2020-07-16 14:18:16
7020
发布2020-07-16 14:18:16
举报
文章被收录于专栏:测试游记

使用原生SQL来进行sqlite的使用

sqlite的好处

  1. sqlite3 开箱即用
  2. 小巧,功能还比较强大,百万级别
  3. 不需要联网
  4. 测试平台

连接与使用

代码语言:javascript
复制
# -*- coding: utf-8 -*-
# @Time    : 2020/7/11 11:03 上午
# @Author  : zhongxin
# @Email   : 490336534@qq.com
# @File    : app.py
import sqlite3

from flask import Flask, g

app = Flask(__name__)


@app.before_request
def db():
    c = sqlite3.connect('test.db')
    g.db = c
    g.c = c.cursor()


@app.teardown_request
def close_db(exception):
    db = getattr(g, 'db', None)
    if db is not None:
        db.close()


@app.route('/', methods=['GET', 'POST'])
def index():
    q = """CREATE TABLE project
        (ID INT PRIMARY KEY    NOT NULL,
        NAME     CHAR(50)    NOT NULL,
        DESC     CHAR(500);"""
    g.c.execute(q)
    g.db.commit()
    q = f'inset into project (ID,NAME) values (123,"ZX")'
    g.c.execute(q)
    g.db.commit()
    return 'Hello'


if __name__ == '__main__':
    app.run()

ORM

什么是ORM

类和对象封装

对象关系映射(Object Relational Mapping,简称ORM)是通过使用描述对象和数据库之间映射的元数据,将面向对象语言程序中的对象自动持久化到关系数据库中。本质上就是将数据从一种形式转换到另外一种形式。这也同时暗示着额外的执行开销;然而,如果ORM作为一种中间件实现,则会有很多机会做优化,而这些在手写的持久层并不存在。更重要的是用于控制转换的元数据需要提供和管理;但是同样,这些花费要比维护手写的方案要少;而且就算是遵守ODMG规范的对象数据库依然需要类级别的元数据。

ORM

好处

  1. 避免SQL注入
  2. 无需为各个不同的数据写不同的查询语句

坏处

  1. 每个具体的语法不一样,但是SQL语句是通用的
  2. 学习成本较高

建表

  • 手工建表:先创建,再根据表结构写代码
  • ORM:先写代码,通过代码自动创建表结构

ORM数据库创建步骤

安装

代码语言:javascript
复制
$ pip install flask-sqlalchemy

配置

代码语言:javascript
复制
from flask import Flask
from flask_sqlalchemy import SQLAlchemy

app = Flask(__name__)
app.config['SQLALCHEMY_DATABASE_URI'] = 'mysql+pymysql://root:123456@localhost:3306/demo'
db = SQLAlchemy(app)  # 数据库对象

'mysql+pymysql://root:123456@localhost:3306/demo'按照示例填写即可

各种数据库的URI
  • Postgres
代码语言:javascript
复制
postgresql://账号:密码@localhost/mydataase
  • Mysql
代码语言:javascript
复制
mysql://账号:密码@localhost/mydataase
  • Oracle
代码语言:javascript
复制
oracle://账号:密码@localhost/mydataase
  • SQLite
代码语言:javascript
复制
sqlite:////path/mydataase.db

定义表结构,设计表

代码语言:javascript
复制
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)

创建表

代码语言:javascript
复制
def create_all():
    return db.create_all()

create_all()

运行

创建一个demo数据库

创建库

运行之后就在我们本地的mysql数据中创建了user

创建后

其他方式创建

命令行
代码语言:javascript
复制
$ flask shell
>>> from app import db
>>> db.create()
migrate
代码语言:javascript
复制
$ pip install flask-migrate
代码语言:javascript
复制
from flask import Flask
from flask_migrate import Migrate
from flask_sqlalchemy import SQLAlchemy

app = Flask(__name__)
app.config['SQLALCHEMY_DATABASE_URI'] = 'mysql+pymysql://root:zx660644@localhost:3306/demo'
db = SQLAlchemy(app)  # 数据库对象
migrate = Migrate(app, db)


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)


def create_all():
    return db.create_all()


create_all()

加一行

代码语言:javascript
复制
migrate = Migrate(app, db)

使用

代码语言:javascript
复制
$ flask db migrate
$ flask db migrate  # 生产脚本
$ flask db upgrade  # 更新到数据库
$ flask db downgrade # 退回

添加数据

代码语言:javascript
复制
@app.route('/index')
def index():
    new_user = User(username='测试游记', email='490336534@qq.com')
    db.session.add(new_user)
    db.session.commit()
    return 'hello'

if __name__ == '__main__':
    app.run()

查看数据库

查询数据

代码语言:javascript
复制
@app.route('/user')
def user():
    user = User.query.all()
    print(user)
    return 'hello'

查询数据

本文参与 腾讯云自媒体同步曝光计划,分享自微信公众号。
原始发表:2020-07-11,如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 测试游记 微信公众号,前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体同步曝光计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
目录
  • 使用原生SQL来进行sqlite的使用
    • sqlite的好处
      • 连接与使用
      • ORM
        • 什么是ORM
          • 好处
            • 坏处
              • 建表
              • ORM数据库创建步骤
                • 安装
                  • 配置
                    • 各种数据库的URI
                  • 定义表结构,设计表
                    • 创建表
                      • 运行
                        • 其他方式创建
                          • 命令行
                          • migrate
                      • 添加数据
                      • 查询数据
                      相关产品与服务
                      云数据库 SQL Server
                      腾讯云数据库 SQL Server (TencentDB for SQL Server)是业界最常用的商用数据库之一,对基于 Windows 架构的应用程序具有完美的支持。TencentDB for SQL Server 拥有微软正版授权,可持续为用户提供最新的功能,避免未授权使用软件的风险。具有即开即用、稳定可靠、安全运行、弹性扩缩等特点。
                      领券
                      问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档