flask中数据访问:

pip install flask-sqlalemy

创建数据:

 创建app的工厂from flask import Flask
from flask_sqlalchemy import SQLAlchemy
from flask_bootstrap import Bootstrap
from flask_nav import Nav
from flask_nav.elements import *
from .views import initAppboot=Bootstrap()
nav=Nav()
db=SQLAlchemy()def creteApp():app = Flask(__name__)# baseDir = os.path.abspath(os.path.dirname(__file__))app.config['SQLALCHEMY_DATABASE_URI'] = 'mysql+pymysql://root:434944800@192.168.101.130/test02?charset=utf8'app.config['SQLALCHEMY_COMMIT_ON_TEARDOWN'] = True   #该配置为True,则每次请求结束都会自动commit数据库的变动app.config['SQLALCHEMY_ECHO']=Truenav.register_element('top', Navbar('flask入门',View('主页', 'index'),View('关于', 'about')))nav.init_app(app)db.init_app(app)boot.init_app(app)initApp(app)app.config.from_pyfile('config.py')return app

启动文件Manager.py配置

from flask_script import Manager
from apps.flaskDemo import creteApp
app=creteApp()
manager=Manager(app)@manager.command
def dev():from livereload import ServerliveServer=Server(app.wsgi_app)liveServer.watch('templates/*.*')liveServer.serve(open_url=True)@manager.command
def createTable():from apps.flaskDemo import dbfrom apps import modelsdb.create_all()if __name__ == '__main__':manager.run()#app.run(debug=True)

启动应用:

     python manager runserver

创建Models:

from .flaskDemo import db
class usersInfo(db.Model):__tablename__='u_info_2_hello'id=db.Column(db.Integer,primary_key=True)username=db.Column(db.String(100),nullable=True)user_age=db.Column(db.Integer,nullable=True)email=db.Column(db.String(300),nullable=True)

主外键关系表

class roles(db.Model):__tablename__='userRoles'id=db.Column(db.Integer,primary_key=True)roleName=db.Column(db.String(200),nullable=True)users=db.relationship('user',backref='myrole')     方向反向查寻class user(db.Model):__tablename__='users'id=db.Column(db.Integer,primary_key=True)userName=db.Column(db.String(200),nullable=True)userEmail=db.Column(db.String(200),nullable=True)roleId=db.Column(db.Integer,db.ForeignKey('userRoles.id'))    与userRoles表的id键关联

多对多关系创建:

tags=db.Table('post_tag_mapping',db.Column('post_id',db.Integer,db.ForeignKey('Post.id')),db.Column('tag_id',db.Integer,db.ForeignKey('Tag.id'))
)
class Post(db.Model):__tablename__ = 'Post'id=db.Column(db.Integer(),primary_key=True)title=db.Column(db.String(255))text=db.Column(db.TEXT)publish_date=db.Column(db.DateTime)tags=db.relationship('Tag',backref=db.backref('myPost'),secondary=tags)class Tag(db.Model):__tablename__='Tag'id=db.Column(db.Integer,primary_key=True)title=db.Column(db.String(255))在以上代码中,使用了db.relationsship函数来设置所需的关系,但是这次多了secondary(次级)参数,该参数会告知sqlalchemy该关联的对象被保存在tag所对应的表中,在代码生成的表中,表关系被保存在了post_tag_mapping中创建表:python manage.py  createTable

数据的CRUD

创建角色表数据
@app.route('/create/')
def createRole():from .models import rolesfrom .flaskDemo import dbadmin=roles(roleName='admin1')roles1=roles(roleName='backupUsers')db.session.add_all([admin,roles1])   使用db.session.add_all([admin,roles])的方式可以同时创建多个,注意在add_all()方法中的参数是一个列表return render_template('data/result1.html')主外键表关系数据的创建
@app.route('/createuser/')
def createUser():from .models import roles,userfrom .flaskDemo import dbrole=roles.query.get(3)     获取角色数据print(type(role))print(role.roleName)#外键部分可以实例,也可以写id值u=user(userName='test',userEmail='222@ddd.com',myrole=role)# u = user(#     userName='test',#     userEmail='222@ddd.com',#     roleId=role.id# )db.session.add(u)db.session.commit()return render_template('data/result1.html')#数据的查询 ,获取全部数据
@app.route('/queryall/')
def queryallUser():from .models import roles, userfrom .flaskDemo import dbuinfo=user.query.all()for item in uinfo:print(item.userName)return render_template('data/result1.html')#数据的查询,获取一条数据
@app.route('/queryone/')
def querysingleUser():from .models import roles, userfrom .flaskDemo import dbuinfo = user.query.get(2)print(uinfo.userName)return render_template('data/result1.html')
更新与删除:@app.route('/removeUser/')def removeUser():'''删除数据:return:'''from .models import roles, userfrom .flaskDemo import dbu=user.query.get(1)db.session.delete(u)db.session.commit()return render_template('data/result1.html')@app.route('/updateuinfo/')def updateUserInfo():'''更新数据:return:'''from .models import roles, userfrom .flaskDemo import dbu=user.query.get(2)u.userName='abc'db.session.add(u)db.session.commit()return render_template('data/result1.html')@app.route('/crosstable/')def query_crosstable():'''查找到角色,并查询下慎于的用户:return: '''from .models import user,rolesr=roles.query.get(2)u=r.usersfor item in u:print(item.userName)return render_template('data/result1.html')

一对多正反查询:

@app.route('/u2r/')
def queryDataFromUser2Role():from .models import useruser01=user.query.first()role=user01.myroleprint(user01.userName,"=======>role:",role.roleName)return render_template('data/result1.html')@app.route('/r2u/')
def queryDataFromRole2User():from .models import rolesr=roles.query.get(2)user=r.usersprint('roles',r.roleName,"==========>users:",user)print('user的类型是是========>',type(user))for item in user:print(item.userName)return render_template('data/result1.html')

反向的应用的另一种用法

@app.route('/userrole/')
def createUserRole():'''创建用户并添加到对应角色:return: '''from .models import user,rolesfrom .flaskDemo import dbrole1=roles.query.get(1)u=user(userName='test',userEmail='fsfsd')role1.users.append(u)db.session.add(role1)db.session.commit()return render_template('data/result1.html')

限制返回条目:

@app.route('/limituser/')
def limitUser():'''限制返回条数:return: '''from .models import userusers=user.query.limit(10).all()for item in users:print(item)return render_template('data/result1.html')

分页:

def pageinate():from .models import useru=user.query.paginate(1,10)print(type(u))print(u.items)for item in u.items:print(item.userName)#当前页print(u.page)#总页print(u.pages)#前一页是否有对象可显示print(u.has_prev)#后一页是否有数据显示print(u.has_next)return render_template('data/result1.html')

多对多的数据操作:

多对多关系数据的写入

@app.route('/createm2m/')
def createm2mRelData():from .models import Post,Tagimport datetimefrom .flaskDemo import dbpost_one=Post(title='鬼吹灯',text='乎啦啦啦啦啦',publish_date=datetime.datetime.now())tag_one=Tag(title='测试')tag_two=Tag(title='这是一个测试')post_one.tags=[tag_one,tag_two]db.session.add(post_one)db.session.commit()return render_template('data/result1.html')

多对多关系数据的查找

@app.route('/query4m2m/')
def query4m2m():from .models import Post, Tag#通过post得到tagprint('通过post====================>tag')post_data=Post.query.get(1)#print(dir(post_data))#print(post_data.tags)for item in post_data.tags:print(item.title)#通过tag得到postprint('通过tag=============>post')tag_data=Tag.query.get(1)#print(dir(tag_data))print(tag_data.title)for item in tag_data.myPost:print(item.title)return render_template('data/result1.html')

多对多关系数据的更新

@app.route('/update4m2m/')
def updateRelform2mData():'''更新多对多关系:return:'''from .models import Post,Tagfrom .flaskDemo import dbpostData=Post.query.get(1)tagData=Tag.query.all()print(type(tagData))postData.tags=tagDatadb.session.add(postData)db.session.commit()return render_template('data/result1.html')

多对多关系数据的关系删除

@app.route('/removeRel/')
def removeRelform2mData():''''移除多对多关系'''from .models import Post,TagpostData=Post.query.get(1)tagData=Tag.query.get(2)postData.tags.remove(tagData)#print(dir(postData.tags))return render_template('data/result1.html')

出现以下错误的处理方法:

C:\Python34\lib\site-packages\flask_sqlalchemy__init__.py:794: FSADeprecationWarning: SQLALCHEMY_TRACK_MODIFICATIONS adds significant overhead and wil

l be disabled by default in the future. Set it to True or False to suppress this warning.

'SQLALCHEMY_TRACK_MODIFICATIONS adds significant overhead and '

将以下代码

track_modifications = app.config.setdefault('SQLALCHEMY_TRACK_MODIFICATIONS', None
)

改为:

track_modifications = app.config.setdefault('SQLALCHEMY_TRACK_MODIFICATIONS', True
)

转载于:https://www.cnblogs.com/lijintian/p/9054553.html

flask中的数据操作相关推荐

  1. 使用Hive或Impala执行SQL语句,对存储在HBase中的数据操作

    https://www.zybuluo.com/aitanjupt/note/209941 使用Hive或Impala执行SQL语句,对存储在HBase中的数据操作 〇.摘要 一.基础环境 二.数据存 ...

  2. 数据科学 IPython 笔记本 7.6 Pandas 中的数据操作

    7.6 Pandas 中的数据操作 原文:Operating on Data in Pandas 译者:飞龙 协议:CC BY-NC-SA 4.0 本节是<Python 数据科学手册>(P ...

  3. 微信小程序引用php函数,微信小程序Page中data数据操作和函数调用详细介绍

    这篇文章主要介绍了微信小程序 详解Page中data数据操作和函数调用的相关资料,需要的朋友可以参考下 微信小程序 详解Page中data数据操作和函数调用 Page() 函数用来注册一个页面.接受一 ...

  4. Flask中的session操作

    https://www.cnblogs.com/notzy/p/9187304.html 一.配置SECRET_KEY 因为flask的session是通过加密之后放到了cookie中.所以有加密就有 ...

  5. Flask ORM SQLAlchemy数据操作完整案例

    ORM ORM 全拼Object-Relation Mapping. 中文意为 对象-关系映射. 主要实现模型对象到关系数据库数据的映射. 比如:把数据库表中每条记录映射为一个模型对象 优点 只需要面 ...

  6. python科学计算笔记(九)pandas中DataFrame数据操作函数

    Python数据分析工具pandas中DataFrame和Series作为主要的数据结构. 本文主要是介绍如何对DataFrame数据进行操作并结合一个实例测试操作函数. 1)查看DataFrame数 ...

  7. opencv获取mat的指针_数字图像处理之opencv中Mat数据操作

    数字图像处理其实就是处理二维矩阵数据.利用opencv来学习处理算法是一种比较好的方式.学习opencv,主要就是调用其中的图像处理函数来实现各种操作.如果要得到想要的处理结果,还需要对图像处理算法有 ...

  8. tensorflow中tfrecord数据操作

    前言: 为了更加展示tfrecord数据的相关操作,笔者后续又写了一个实践的简单例子进一步解释,具体可以看: TFrecords 制作数据集小例子(多标签)_爱吃火锅的博客-CSDN博客 正文: tf ...

  9. mysql 目录武沛齐_MySQL数据表中的数据操作

    1.插入数据 insert into t_user (username,password,nickname) values ('foye','123','佛爷'); 以下方式必须写出所有的字段 ins ...

最新文章

  1. simplexmlelement类设置编码_「软帝学院」:2019java五大常用工具类整理
  2. Android Studio不安装opencv manager配置
  3. [WC2018]通道
  4. Android开发常用开源框架2
  5. 基于HTML5移动web应用
  6. Systemd 入门及常用命令
  7. 2013 第4届 蓝桥杯 黄金连分数【详解】
  8. 二级导航 sql php,帝国cms栏目导航调用之SQL语句调用一级栏目和二级栏目的方法...
  9. Linux的实际操作:查询用户id切换用户su -
  10. 为什么大学感觉学编程很难?原因有这三点。
  11. 史上最简单的SpringCloud教程 | 第四篇:断路器(Hystrix)--有BUG,注意看我的备注
  12. php 目录文件大小,利用php怎么对目录文件的大小进行统计
  13. Firefox 技巧
  14. Ubuntu安装完后设置root密码-转
  15. 为什么不建议将Abaqus汉化使用?
  16. Axure原型图 时间跳动 计时动画效果
  17. 增加Java项目经验
  18. java cryptojs_CryptoJS用法
  19. Matlab Coder将m文件转换成C/C++
  20. 搜狐新闻文本分类数据集

热门文章

  1. HTML播放本地视频
  2. 我之看法--赵丹阳与巴菲特的午餐
  3. 复合二进制文档(Compound Document File)解析
  4. CocoaPods安装和使用教程
  5. 【MyAndroid】viewpage+cardView卡片海报效果展示--100个经典UI设计模板(99/100)
  6. #039;pan java_每个'循环的Java'如何工作?
  7. 音频基础知识及编码原理
  8. Python习题集(三)
  9. Java和c++哪个就业前景好
  10. 人工智能动物识别系统C++ demo