安装

 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. love2d杂记9--光照效果

    光照效果需要用shader,这个我一直没学,现在时间较少,先放到这里,有时间我再补,如果大家 发现好的opengl shader教程(如果没记错的love2d用的是glsl 1.1),推荐一下. 这里 ...

  2. zabbix 监控 AWS-SQS 队列

    zabbix-AWS_SQS-monitor AWS SQS status monitor with zabbix zabbix通过 AWS 云 api 自动发现.监控 AWS-SQS 本版本数据的图 ...

  3. CSS旋转&翻转,兼容方案

    CSS代码,高级浏览器使用transform,ie用滤镜实现. 转自http://aijuans.iteye.com/blog/19364921 /*水平翻转*/ 2 .flipx { 3 -moz- ...

  4. 关系运算符:instanceof

    关系运算符:instanceof a instanceof Animal;(这个式子的结果是一个布尔表达式) a为对象变量,Animal是类名. 上面语句是判定a是否可以贴Animal标签.如果可以贴 ...

  5. Python+selenium之获取文本值和下拉框选择数据

    Python+selenium之获取文本值和下拉框选择数据 一.结合实例进行描述 1. 实例如下所示: #新增标签操作 def func_labels(self): self.driver.find_ ...

  6. FragmentStatePagerAdapter写法

    为了节省资源,分批加载数据//适配器class TabLayoutViewPagerAdapter extends FragmentStatePagerAdapter { public TabLayo ...

  7. MCU相关知识

    一个处理器达到 200 DMIPS的性能,这是个什么概念? DMIPS全称叫Dhrystone MIPS 这项测试是用来计算同一秒内系统的处理能力,它的单位以百万来计算,也就是(MIPS) 上面的意思 ...

  8. Java连接MongoDB样例

    package com.moonlit.example; import com.mongodb.BasicDBObject; import com.mongodb.BulkWriteOperation ...

  9. Transact-SQL小知识

    一.Isnull 函数 Isnull 函数主要作用是将为空的值替换为指定值,如果不为空返回检查类型的返回值,isnull的语法: Isnull (check_expression , replacem ...

  10. 【CF628D】Magic Numbers 数位DP

    [CF628D]Magic Numbers 题意:求[a,b]中,偶数位的数字都是d,其余为数字都不是d,且能被m整除的数的个数(这里的偶数位是的是从高位往低位数的偶数位).$a,b<10^{2 ...