Flask用Flask-SQLAlchemy连接MySQL
安装
pip3 install Flask-SQLAlchemy
测试环境目录结构

settings.py
DIALECT = 'mysql'
DRIVER = 'pymysql'
USERNAME = 'root'
PASSWORD = '808069'
HOST = '127.0.0.1'
PORT = '3306'
DATABASE = 'cms' SQLALCHEMY_DATABASE_URI = '{}+{}://{}:{}@{}:{}/{}?charset=utf8'.format(
DIALECT,DRIVER,USERNAME,PASSWORD,HOST,PORT,DATABASE
)
SQLALCHEMY_COMMIT_ON_TEARDOWN = True
SQLALCHEMY_TRACK_MODIFICATIONS = True SQLALCHEMY_POOL_SIZE = 10
SQLALCHEMY_MAX_OVERFLOW = 5
__init__.py
from flask_sqlalchemy import SQLAlchemy
from flask import Flask db = SQLAlchemy() def create_app():
app = Flask(__name__)
app.config.from_object('settings') db = SQLAlchemy()
db.init_app(app) return app
manage.py
from ttt import create_app app = create_app() if __name__ == '__main__':
app.run()
models.py
from manage import db class User(db.Model):
__tablename__ = 'user'
id = db.Column(db.INTEGER,primary_key=True)
username = db.Column(db.String(80),unique=True)
password = db.Column(db.String(80),nullable=False) class CodeCountRecord(db.Model):
__tablename = 'codecountrecord'
id = db.Column(db.INTEGER,primary_key=True)
count = db.Column(db.INTEGER)
data = db.Column(db.DATE)
user = db.Column(db.ForeignKey('user.id'))
create_tables.py
from ttt import db, create_app
from ttt.models import * app = create_app()
app_ctx = app.app_context() # app_ctx = app/g
with app_ctx: # __enter__,通过LocalStack放入Local中
db.create_all() # 调用LocalStack放入Local中获取app,再去app中获取配置
这种方式即为离线脚本(不用启动项目)的方式创建数据库
直接右键运行models.py即可创建表

操作
增
from cms.models import User
from manage import db def create_user():
# 创建一个新用户对象
user = User()
user.username = 'fuyong'
user.password = '123' # 将新创建的用户添加到数据库会话中
db.session.add(user)
# 将数据库会话中的变动提交到数据库中, 记住, 如果不 commit, 数据库中是没有变化的.
db.session.commit() create_user()
删
def delete_user():
# 获取用户对象
user = User.query.filter_by(id=1).first() # 删除用户
db.session.delete(user) #提交数据库会话
db.session.commit() delete_user()
改
def update_user():
# 获取用户对象
user = User.query.filter_by(id=2).first() # 修改用户
user.password = '123567' #提交数据库会话
db.session.commit() update_user()
查
def select_user():
# 查询所有用户
users_list = User.query.all() # 查询用户名称为 fuyong 的第一个用户, 并返回用户实例, 因为之前定义数据库的时候定义用户名称唯一, 所以数据库中用户名称为 test 的应该只有一个.
user = User.query.filter_by(username='fuyong').first()
# or
user = User.query.filter(User.username == 'fuyong').first() # 模糊查询, 查找用户名以abc 结尾的所有用户
users_list = User.query.filter(User.username.endsWith('g')).all() # 查询用户名不是 fuyong 的第一个用户
user = User.query.filter(User.username != 'fuyong').first()
循环导入的问题
如果上面的例子继续写下去的时候,我们或许会在视图views中引入models文件以操作数据,在models文件中引入manage文件中的db以定义类和字段,
然后在manage文件中引入views文件以注册蓝图(register_blueprint),这样就出现了a引入b,b引入c,c引入a的问题,就会报错,
解决办法就是另外创建一个ext.py文件,专门用来创建db,代码如下:
from flask_sqlalchemy import SQLAlchemy db = SQLAlchemy()
注意:此时先不讲app传入
然后在manage.py文件中,导入db,然后初始化,将app传进去:
db.init_app(app)
这样,在视图中需要用db的之后直接从ext导入,而不再从manage里导入
Flask用Flask-SQLAlchemy连接MySQL的更多相关文章
- python使用sqlalchemy连接mysql数据库
环境:centos7+python2.7.5+sqlalchemy sqlalchemy是python当中比较出名的orm程序.在python中,使用sqlalchemy连接mysql数据库进行操作非 ...
- Flask使用SQLAlchemy连接mysql
表操作 models.py from sqlalchemy.ext.declarative import declarative_base from sqlalchemy import Column ...
- flask中使用SQLAlchemy操作mysql的一些注意事项和坑
一 ImportError: cannot import name 'db' 由于app最后才加载,所以其他文件,比如models.py不能从app.py导入任何变量, 要使用db可以先定义一个,之后 ...
- sqlalchemy连接 MySQL(转)
from sqlalchemy import create_engine,Table,Column,Integer,String,MetaData,ForeignKey engine=create_e ...
- python使用sqlalchemy连接pymysql数据库
python使用sqlalchemy连接mysql数据库 字数833 阅读461 评论0 喜欢1 sqlalchemy是python当中比较出名的orm程序. 什么是orm? orm英文全称objec ...
- 用 Flask 来写个轻博客 (3) — (M)VC_连接 MySQL 和 SQLAlchemy
目录 目录 前文列表 扩展阅读 前言 Models 模型 SQLAlchemy 安装 SQLAlchemy 安装 Mysql 建立 SQLAlchemy 和 Mysql 的连接 前文列表 用 Flas ...
- flask使用pymysql连接MySQL,生成xls文件并下载到本地
版本一:将MySQL数据写入到excel(xsl)文件并下载到默认文件夹(一般问电脑的下载文件夹里面),并显示特效到前端页面. flask框架连接MySQL,我们使用pymsql这个工具,如下操作: ...
- flask连接mysql数据库
from flask import Flask from flask_sqlalchemy import SQLAlchemy import pymysql pymysql.install_as_My ...
- Flask虚拟环境连接mysql出现1366的解决方案
报错信息 Warning: (1366, "Incorrect string value: '\xD6\xD0\xB9\xFA\xB1\xEA...' for column 'VARIABL ...
随机推荐
- 纯css3实现的win8加载动画
今天给大家分享一款纯css3实现的win8加载动画.在这款实例中动画效果完全由css3实现.一起看下效果图: 在线预览 源码下载 实现的代码. html代码: <div class=&quo ...
- 跟着百度学PHP[8]-setcookie的其他参数学习
setcookie(name,value,time,path,domain,secure) 第四个参数是cookie的有效路径.顾名思义就是在那个路径下是有效的.当然了其子目录下也是有效的.比如 /h ...
- 常用jar命令
JAR包是Java中所特有一种压缩文档.存储格式格式就是.zip包.但是与ZIP包不同的地方是,生成JAR包时候,会自动添加一个META-INF\MANIFEST.MF文件 命令参数jar {c t ...
- Memcached内存分配及使用问题
在启动memcached的时候可以加-f参数和-n参数.-f指定各slab里面chunk大小的变化比例,默认1.25,-n指定slab里面chunk大小从多少开始.使用memcache_add($me ...
- Differential Geometry之第七章曲面的若干整体性质
1.曲面的整体描述 2.整体的Gauss-Bonnet公式 2.1.曲面的三角剖分 2.2.Gauss-Bonnet公式 = 2.3.Gauss-Bonnet定理的应用 2.3.1.切向量场的指数定理 ...
- 第二百七十八节,MySQL数据库-表内容操作
MySQL数据库-表内容操作 1.表内容增加 insert into 表 (列名,列名...) values (值,值,值...); 添加表内容添加一条数据 insert into 表 (列名,列名. ...
- 因此mybatis最好与spring集成起来使用
单独使用mybatis是有很多限制的(比如无法实现跨越多个session的事务),而且很多业务系统本来就是使用spring来管理的事务,因此mybatis最好与spring集成起来使用. spring ...
- 【BZOJ】1072: [SCOI2007]排列perm(状压dp+特殊的技巧)
http://www.lydsy.com/JudgeOnline/problem.php?id=1072 首先无限膜拜题解orz表示只会暴力orz 数据那么小我竟然想不到状压! orz 这种题可以取模 ...
- JSP内置对象——response
response对象response对象包含了响应客户端的有关信息,但在JSP中很少使用它.它是HttpServletResponse类的实例.response对象具有页面作用域,即访问一个页面时,该 ...
- 74、在ListView最后一项添加一个静态Item数据
<?xml version="1.0" encoding="UTF-8"?> <LinearLayout xmlns:android=&quo ...