# -*- 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()
类和对象封装
对象关系映射(Object Relational Mapping,简称ORM)是通过使用描述对象和数据库之间映射的元数据,将面向对象语言程序中的对象自动持久化到关系数据库中。本质上就是将数据从一种形式转换到另外一种形式。这也同时暗示着额外的执行开销;然而,如果ORM作为一种中间件实现,则会有很多机会做优化,而这些在手写的持久层并不存在。更重要的是用于控制转换的元数据需要提供和管理;但是同样,这些花费要比维护手写的方案要少;而且就算是遵守ODMG规范的对象数据库依然需要类级别的元数据。
ORM
$ pip install flask-sqlalchemy
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'
按照示例填写即可
postgresql://账号:密码@localhost/mydataase
mysql://账号:密码@localhost/mydataase
oracle://账号:密码@localhost/mydataase
sqlite:////path/mydataase.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()
创建一个demo
数据库
创建库
运行之后就在我们本地的mysql数据中创建了user
表
创建后
$ flask shell
>>> from app import db
>>> db.create()
$ pip install flask-migrate
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()
加一行
migrate = Migrate(app, db)
使用
$ flask db migrate
$ flask db migrate # 生产脚本
$ flask db upgrade # 更新到数据库
$ flask db downgrade # 退回
@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()
查看数据库
@app.route('/user')
def user():
user = User.query.all()
print(user)
return 'hello'
查询数据