Flask SQLAlchemy & model
Flask-SQLAlchemy
Flask-SQLAlchemy库让flask更方便的使用SQLALchemy,是一个强大的关系形数据库框架,既可以使用orm方式操作数据库,也可以使用原始的SQL命令.
需要安装的包
MySQL
SQLAlchemy
Flask-SQLAlchemy
mysqlclient
配置Flask-SQLAlchemy
示例:
MySQL:
mysql://username:password@hostname/database
定义模型
from sqlalchemy import Column, Integer, MetaData, VARCHAR
from flask_sqlalchemy import SQLAlchemy
from flask import Flask app = Flask(__name__) #配置数据库地址
app.config['SQLALCHEMY_DATABASE_URI'] = 'mysql://root:wjjf2008@127.0.0.1:3306/internet_plus?charset=utf8'
#该配置为True,则每次请求结束都会自动commit数据库的变动
app.config['SQLALCHEMY_COMMIT_ON_TEARDOWN'] = True db = SQLAlchemy(app)
#也可以db = SQLAlchemy() db.init_app(app) class User(db.Model): #使用继承至db.Model的类来定义模型
__tablename__ = 'User' #if use Declarative,tablename is needed
user_id = db.Column('user_id', db.Integer, autoincrement=True, primary_key = True)
user_name = db.Column('user_name', db.VARCHAR(20), nullable=False, unique=True, default='')
user_phone = db.Column('user_phone', db.VARCHAR(20), nullable=False, default='')
user_email = db.Column('user_email', db.VARCHAR(30), nullable=False, default='') def __repr__(self):
return '<User %r>' % self.user_name if __name__ == '__main__':
db.create_all() #创建数据库
常用字段选项:
primary_key 设置主键
unique 是否唯一
index 是否创建索引
nullable 是否允许为空
default 设置默认值,可以传入函数的引用 如传入 datetime.datetime.utcnow 则每次创建时时间都是最新时间
数据库操作
- 插入数据
from models2 import User, db
from flask_sqlalchemy import SQLAlchemy #建立一个新用户
u = User();
u.user_name = 'Jeffrey'
u.user_phone = ''
u.user_email = '729957621@qq.com'
#将用户添加到数据库会话中
db.session.add(u)
#将数据库会话中的变动提交到数据库中,如果不Commit,数据库中是没有改动的
db.session.commit()
- 查找数据
#返回所有用户保存到list中
user_list = User.query.all() #查找username为abc的第一个用户,返回用户实例
user_list = User.query.filter_by(user_name='Jeffrey').first()
- 删除数据
u = User.query.first()
db.session.delete(u)
db.session.commit()
- 修改数据
u = User.query.first()
u.username = 'sb'
db.session.commit()
另一种使用数据库的方法
from sqlalchemy import Column, Integer, MetaData, VARCHAR
from sqlalchemy import create_engine
from sqlalchemy.ext.declarative import declarative_base
from sqlalchemy.orm import sessionmaker
from flask.ext.sqlalchemy import SQLAlchemy metadata = MetaData()
Base = declarative_base(metadata=metadata)
db = 'mysql://root:mysqlpassword@127.0.0.1:3306/dbname?charset=utf8' def get_session(): #此处返回一个session
#create_engine() 会返回一个数据库引擎,echo 参数为 True 时,会显示每条执行的 SQL 语句,生产环境下可关闭。
engine = create_engine(db, encoding="utf-8")
#sessionmaker() 会生成一个数据库会话类。这个类的实例可以当成一个数据库连接,它同时还记录了一些查询的数据,并决定什么时候执行 SQL 语句。
mysql_session_maker = sessionmaker(bind=engine)
session = mysql_session_maker()
'''
# 拿到 session 后,就可以执行 SQL 了
session.execute('create database abc')
print(session.execute('show databases').fetchall())
session.execute('use abc')
# 建 user 表的过程略
session.execute('select * from user where id = 1').first()
session.execute('select * from user where id = :id', {'id': 1}).first()
'''
return session sql_session = get_session() class User(Base):
__tablename__ = 'User' #if use Declarative,tablename is needed
user_id = Column('user_id', Integer, autoincrement=True, primary_key = True)
user_name = Column('user_name', VARCHAR(20), nullable=False, unique=True, default='')
user_phone = Column('user_phone', VARCHAR(20), nullable=False, default='')
user_email = Column('user_email', VARCHAR(30), nullable=False, default='') if __name__ == '__main__':
#定义一个表
engine = create_engine(db, encoding="utf-8", echo=True)
Base.metadata.create_all(engine)
print(sql_session.query(User).count())
Flask官方文档:http://docs.jinkan.org/docs/flask/
Flask SQLAlchemy & model的更多相关文章
- flask SQLAlchemy中一对多的关系实现
SQLAlchemy是Python中比较优秀的orm框架,在SQLAlchemy中定义了多种数据库表的对应关系, 其中一对多是一种比较常见的关系.利用flask sqlalchemy实现一对多的关系如 ...
- flask, SQLAlchemy, sqlite3 实现 RESTful API 的 todo list, 同时支持form操作
flask, SQLAlchemy, sqlite3 实现 RESTful API, 同时支持form操作. 前端与后台的交互都采用json数据格式,原生javascript实现的ajax.其技术要点 ...
- Flask – SQLAlchemy成员增加
目录 简介 结构 展示 技术 运行 代码 创建数据库表单 views视图 home主页 添加成员addnew.html 展示页show_all 简介 结构 $ tree -I "__pyca ...
- flask建表遇到的错误: flask,sqlalchemy.exc.OperationalError: (MySQLdb._exceptions.OperationalError) (1071, 'Specified key was too long; max key length is 767 bytes')
error:flask,sqlalchemy.exc.OperationalError: (MySQLdb._exceptions.OperationalError) (1071, 'Specifie ...
- Flask+SQLAlchemy+alembic+Flask-RESTful使用
前言 其实准备把这篇删掉,先写Flask-restful相关的,后来想想大体框架还是先写出来,这两天踩了很多坑,有的谷歌也没有答案.一直摸索也总算是开始了. 正文 SQLAlchemy/alembic ...
- flask SQLALchemy外键及约束
from flask import Flask,session from flask_sqlalchemy import SQLAlchemy import config app = Flask(__ ...
- python3 + flask + sqlalchemy +orm(3):多对多关系
一篇文章有多个tag,一个tag也可以属于多篇文章,文章和tag存在多对多关系 config.py DEBUG = True #dialect+driver://root:1q2w3e4r5t@127 ...
- python3 + flask + sqlalchemy +orm(2):数据库中添加表
往数据库中添加一张保存文章的表,表明为article,字段有id,title,content 同样一个配置文件:config.py DEBUG = True #dialect+driver://roo ...
- Python利用flask sqlalchemy实现分页效果
Flask-sqlalchemy是关于flask一个针对数据库管理的.文中我们采用一个关于员工显示例子. 首先,我们创建SQLALCHEMY对像db. from flask import Flask, ...
随机推荐
- django中的转义
什么是html转义? 所谓html转义就是将 html关键字(包括标签,特殊字符等) 进行过滤替换.过滤替换格式如下: 接下来我们通过实例演示django中转义的细节以及如何关闭转义 一 dja ...
- 并发库应用之三 & 线程池与定时器应用
在TCP服务器编程模型的原理,每一个客户端连接用一个单独的线程为之服务,当与客户端的会话结束时,线程也就结束了,即每来一个客户端连接,服务器端就要创建一个新线程.如果访问服务器的客户端很多,那么服务器 ...
- OpenStack 认证服务 KeyStone部署(三)
Keystone 介绍 Keystone作用: 用户与认证:用户权限与用户行为跟踪: 服务目录:提供一个服务目录,包括所有服务项和相关Api的断点 SOA相关知识 Keystone主要两大功能用户认证 ...
- vue 项目代码初始化
1. <meta>补充 <head> <meta charset="utf-8"> <meta name="viewport&q ...
- webapi框架搭建-数据访问ef code first
webapi框架搭建系列博客 为什么用ef? 我相信很多博友和我一样都有这种“选择困难症”,我曾经有,现在也有,这是技术人的一个通病——总想用“更完美”的方式去实现,导致在技术选择上犹豫不决,或总是推 ...
- Vue入坑教程(一)——搭建vue-cli脚手架
1. Vue简介 详细内容可以参考官网Vue.js 1)兼容性 Vue 不支持 IE8 及以下版本,因为 Vue 使用了 IE8 无法模拟的 ECMAScript 5 特性.但它支持所有兼容 ECMA ...
- codevs 3152 装箱问题3
装箱问题3 http://codevs.cn/problem/3152/ 题目描述 Description 设有n种物品,记作A1.A2.….An,对应于每个Ai(1<=i<=n)都有一个 ...
- [译]Quartz.NET 框架 教程(中文版)2.2.x 之第八课 调度监听器
第八课 调度监听器 调度监听器和触发监听器和触发监听器.作业任务监听器非常相似,只是调度监听器在调度器内接收通知事件,而不需要关联具体的触发器或作业任务事件. 跟调度监听器相关的事件,添加作业任务/触 ...
- Xilinx Altera FPGA中的逻辑资源(Slices VS LE)比较
前言 经常有朋友会问我,“我这个方案是用A家的FPGA还是X家的FPGA呢?他们的容量够不够呢?他们的容量怎么比较呢?”当然,在大部分时候,我在给客户做设计的时候,直接会用到最高容量的产品,因为我们的 ...
- JavaScript 优雅的实现方式包含你可能不知道的知识点
有些东西很好用,但是你未必知道:有些东西你可能用过,但是你未必知道原理. 实现一个目的有多种途径,俗话说,条条大路通罗马.很多内容来自平时的一些收集以及过往博客文章底下的精彩评论,收集整理拓展一波,发 ...