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 ...
随机推荐
- 广义线性模型 - Andrew Ng机器学习公开课笔记1.6
在分类问题中我们如果: 他们都是广义线性模型中的一个样例,在理解广义线性模型之前须要先理解指数分布族. 指数分布族(The Exponential Family) 假设一个分布能够用例如以下公式表达, ...
- scala,spark练习题提高
1.求每家公司有哪些产品 val arr3 = List("Apache" -> "Spark", "Apache" -> &q ...
- gt811 driver
#include <linux/module.h> #include <linux/i2c.h> #include <linux/platform_device.h> ...
- Supervisor重新加载配置启动新的进程
一.添加好配置文件后 二.更新新的配置到supervisord supervisorctl update 三.重新启动配置中的所有程序 supervisorctl reload 四.启动某个进程(pr ...
- Memcached内存分配及使用问题
在启动memcached的时候可以加-f参数和-n参数.-f指定各slab里面chunk大小的变化比例,默认1.25,-n指定slab里面chunk大小从多少开始.使用memcache_add($me ...
- Android基础总结(三)SQLite,ListView,对话框
测试 黑盒测试 测试逻辑业务 白盒测试 测试逻辑方法 根据测试粒度 方法测试:function test 单元测试:unit test 集成测试:integration test 系统测试:syste ...
- centos7系统根目录扩容
比如 点击了后 点击创建虚拟磁盘 选择一个 20G 然后启动虚拟机使用fdisk查看所有的磁盘 看是否新增了一个20G的硬盘 [root@localhost ~]# fdisk -l 磁盘 /dev ...
- 除去Scala的糖衣(13) -- Default Parameter Value
欢迎关注我的新博客地址:http://cuipengfei.me/ 好久没有写博客了,上一次更新竟然是一月份. 说工作忙都是借口,咋有空看美剧呢. 这半年荒废掉博客说到底就是懒,惯性的懒惰.写博客这事 ...
- 第二百七十八节,MySQL数据库-表内容操作
MySQL数据库-表内容操作 1.表内容增加 insert into 表 (列名,列名...) values (值,值,值...); 添加表内容添加一条数据 insert into 表 (列名,列名. ...
- 测试RESTful API利器-Postman
对于前端开发者而言,最需要的往往不是技术本身,其实技术都没什么难的,而最缺少的则是各种各样好的兵器,比如调试,开发工具等等. 我们这里就推荐一款前端开发的利器-Postman,它是Google Chr ...