安装

 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的更多相关文章

  1. python使用sqlalchemy连接mysql数据库

    环境:centos7+python2.7.5+sqlalchemy sqlalchemy是python当中比较出名的orm程序.在python中,使用sqlalchemy连接mysql数据库进行操作非 ...

  2. Flask使用SQLAlchemy连接mysql

    表操作 models.py from sqlalchemy.ext.declarative import declarative_base from sqlalchemy import Column ...

  3. flask中使用SQLAlchemy操作mysql的一些注意事项和坑

    一 ImportError: cannot import name 'db' 由于app最后才加载,所以其他文件,比如models.py不能从app.py导入任何变量, 要使用db可以先定义一个,之后 ...

  4. sqlalchemy连接 MySQL(转)

    from sqlalchemy import create_engine,Table,Column,Integer,String,MetaData,ForeignKey engine=create_e ...

  5. python使用sqlalchemy连接pymysql数据库

    python使用sqlalchemy连接mysql数据库 字数833 阅读461 评论0 喜欢1 sqlalchemy是python当中比较出名的orm程序. 什么是orm? orm英文全称objec ...

  6. 用 Flask 来写个轻博客 (3) — (M)VC_连接 MySQL 和 SQLAlchemy

    目录 目录 前文列表 扩展阅读 前言 Models 模型 SQLAlchemy 安装 SQLAlchemy 安装 Mysql 建立 SQLAlchemy 和 Mysql 的连接 前文列表 用 Flas ...

  7. flask使用pymysql连接MySQL,生成xls文件并下载到本地

    版本一:将MySQL数据写入到excel(xsl)文件并下载到默认文件夹(一般问电脑的下载文件夹里面),并显示特效到前端页面. flask框架连接MySQL,我们使用pymsql这个工具,如下操作: ...

  8. flask连接mysql数据库

    from flask import Flask from flask_sqlalchemy import SQLAlchemy import pymysql pymysql.install_as_My ...

  9. Flask虚拟环境连接mysql出现1366的解决方案

    报错信息 Warning: (1366, "Incorrect string value: '\xD6\xD0\xB9\xFA\xB1\xEA...' for column 'VARIABL ...

随机推荐

  1. 纯css3实现的win8加载动画

    今天给大家分享一款纯css3实现的win8加载动画.在这款实例中动画效果完全由css3实现.一起看下效果图: 在线预览   源码下载 实现的代码. html代码: <div class=&quo ...

  2. 跟着百度学PHP[8]-setcookie的其他参数学习

    setcookie(name,value,time,path,domain,secure) 第四个参数是cookie的有效路径.顾名思义就是在那个路径下是有效的.当然了其子目录下也是有效的.比如 /h ...

  3. 常用jar命令

    JAR包是Java中所特有一种压缩文档.存储格式格式就是.zip包.但是与ZIP包不同的地方是,生成JAR包时候,会自动添加一个META-INF\MANIFEST.MF文件 命令参数jar {c t ...

  4. Memcached内存分配及使用问题

    在启动memcached的时候可以加-f参数和-n参数.-f指定各slab里面chunk大小的变化比例,默认1.25,-n指定slab里面chunk大小从多少开始.使用memcache_add($me ...

  5. Differential Geometry之第七章曲面的若干整体性质

    1.曲面的整体描述 2.整体的Gauss-Bonnet公式 2.1.曲面的三角剖分 2.2.Gauss-Bonnet公式 = 2.3.Gauss-Bonnet定理的应用 2.3.1.切向量场的指数定理 ...

  6. 第二百七十八节,MySQL数据库-表内容操作

    MySQL数据库-表内容操作 1.表内容增加 insert into 表 (列名,列名...) values (值,值,值...); 添加表内容添加一条数据 insert into 表 (列名,列名. ...

  7. 因此mybatis最好与spring集成起来使用

    单独使用mybatis是有很多限制的(比如无法实现跨越多个session的事务),而且很多业务系统本来就是使用spring来管理的事务,因此mybatis最好与spring集成起来使用. spring ...

  8. 【BZOJ】1072: [SCOI2007]排列perm(状压dp+特殊的技巧)

    http://www.lydsy.com/JudgeOnline/problem.php?id=1072 首先无限膜拜题解orz表示只会暴力orz 数据那么小我竟然想不到状压! orz 这种题可以取模 ...

  9. JSP内置对象——response

    response对象response对象包含了响应客户端的有关信息,但在JSP中很少使用它.它是HttpServletResponse类的实例.response对象具有页面作用域,即访问一个页面时,该 ...

  10. 74、在ListView最后一项添加一个静态Item数据

    <?xml version="1.0" encoding="UTF-8"?> <LinearLayout xmlns:android=&quo ...