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 表的过程略
print
session.execute('select * from user where id = 1').first()
print
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的更多相关文章

  1. flask SQLAlchemy中一对多的关系实现

    SQLAlchemy是Python中比较优秀的orm框架,在SQLAlchemy中定义了多种数据库表的对应关系, 其中一对多是一种比较常见的关系.利用flask sqlalchemy实现一对多的关系如 ...

  2. flask, SQLAlchemy, sqlite3 实现 RESTful API 的 todo list, 同时支持form操作

    flask, SQLAlchemy, sqlite3 实现 RESTful API, 同时支持form操作. 前端与后台的交互都采用json数据格式,原生javascript实现的ajax.其技术要点 ...

  3. Flask – SQLAlchemy成员增加

    目录 简介 结构 展示 技术 运行 代码 创建数据库表单 views视图 home主页 添加成员addnew.html 展示页show_all 简介 结构 $ tree -I "__pyca ...

  4. 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 ...

  5. Flask+SQLAlchemy+alembic+Flask-RESTful使用

    前言 其实准备把这篇删掉,先写Flask-restful相关的,后来想想大体框架还是先写出来,这两天踩了很多坑,有的谷歌也没有答案.一直摸索也总算是开始了. 正文 SQLAlchemy/alembic ...

  6. flask SQLALchemy外键及约束

    from flask import Flask,session from flask_sqlalchemy import SQLAlchemy import config app = Flask(__ ...

  7. python3 + flask + sqlalchemy +orm(3):多对多关系

    一篇文章有多个tag,一个tag也可以属于多篇文章,文章和tag存在多对多关系 config.py DEBUG = True #dialect+driver://root:1q2w3e4r5t@127 ...

  8. python3 + flask + sqlalchemy +orm(2):数据库中添加表

    往数据库中添加一张保存文章的表,表明为article,字段有id,title,content 同样一个配置文件:config.py DEBUG = True #dialect+driver://roo ...

  9. Python利用flask sqlalchemy实现分页效果

    Flask-sqlalchemy是关于flask一个针对数据库管理的.文中我们采用一个关于员工显示例子. 首先,我们创建SQLALCHEMY对像db. from flask import Flask, ...

随机推荐

  1. R语言画图

    转http://www.cnblogs.com/jiangmiaomiao/p/6991632.html 0 引言 R支持4种图形类型: base graphics, grid graphics, l ...

  2. GCC、GNU C、C99、ANSI C

    ANSI C ANSI C是由美国国家标准协会(ANSI)及国际标准化组织(ISO)推出的关于C语言的标准.ANSI C 标准同时规定了 C 标准库. ANSI C发展历史 C 的第一个标准是由ANS ...

  3. 来自Redis 作者的看法 —— Twemproxy

    虽然大量用户使用Redis节点的大型农场,但从项目本身来看,Redis主要是单实例业务. 我有很大的计划与项目一起分发,在某种程度上我不再评估Redis的任何线程版本:对我来说,从Redis的角度看, ...

  4. git 使用 gitignore

    git 使用 git简介 git 命令 git  忽略文件 git   作用:版本控制 Git 是一个开源的分布式版本控制软件,用以有效.高速的处理从很小到非常大的项目版本管理. Git 最初是由Li ...

  5. bzoj千题计划149:bzoj2527: [Poi2011]Meteors

    http://www.lydsy.com/JudgeOnline/problem.php?id=2527 整体二分 区间加,单点查,树状数组维护差分序列 注意 累积可能会爆long long,所以一满 ...

  6. 图论:LCA-欧拉序

    #include<cmath> #include<vector> #include<cstdio> #include<cstring> #include ...

  7. Git之用户凭证

    由于 Git 和 Github 交互操作可能会很频繁,为了防止每次操作重复输入用户名和密码,Git 提供了两种解决方法:

  8. Dialog插件artDialog

    经本人测试,发现没有layer好用,因为artDialog不能拖拽.不过除了拖拽,其他还蛮简洁的,在自定义上的灵活性也还可以.下面是我自己写的测试demo. <!DOCTYPE html> ...

  9. SpringCloud(六) Hystrix入门

    前提 一个可用的Eureka注册中心(文中以之前博客中双节点注册中心,不重要) 一个连接到这个注册中心的服务提供者 快速入门 项目搭建 搭建一个新maven项目,artifactid为Ribbon-c ...

  10. 精心整理的十个必须要知道CSS+DIV技巧

    1.css font的简写规则  当我们写字体样式的时候,我们也许会这样子写 font-size: 1em; line-height: 1.5em; font-weight: bold; font-s ...