flask-sqlalchemy数据库自动更新

Posted

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了flask-sqlalchemy数据库自动更新相关的知识,希望对你有一定的参考价值。

@spi.route('/planned/test')
def planned_test():
spider_job_list = SpiderJob.query.all()
spider_list = SpiderInfo.query.all()
return render_template('admin/spiders/planned-task.html', spider_job_list=spider_job_list, spider_list=spider_list)
这么写 数据库里有新内容的话,前端是没数据的,只有重启项目才会刷新,所以为了让他不重启就能同步数据,应该怎么写从数据库提取内容呢?

python3下用flask-sqlalchemy对mysql数据库操作案例:
from flask import Flask
from flask.ext.sqlalchemy import SQLAlchemy

app = Flask(__name__)
app.config['SQLALCHEMY_DATABASE_URI'] = 'mysql://username:password@localhost/db_name'
db = SQLAlchemy(app)

class User(db.Model):
id = db.Column(db.Integer, primary_key=True)
username = db.Column(db.String(80), unique=True)
email = db.Column(db.String(120), unique=True)

def __init__(self, username, email):
self.username = username
self.email = email

def __repr__(self):
return '<User %r>' % self.username

admin = User('admin', 'admin@example.com')

db.create_all() # In case user table doesn't exists already. Else remove it.

db.session.add(admin)

db.session.commit() # This is needed to write the changes to database

User.query.all()

User.query.filter_by(username='admin').first()
参考技术A 数据库是按照数据结构来组织、存储和管理数据的仓库,数据管理不再仅仅是存储和管理数据,而转变成用户所需要的各种数据管理的方式。数据库有很多种类型,从最简单的存储有各种数据的表格到能够进行海量数据存储的大型数据库系统都在各个方面得到了广泛的应用。在信息化社会,充分有效地管理和利用各类信息资源,是进行科学研究和决策管理的前提条件。数据库技术是管理信息系统、办公自动化系统、决策支持系统等各类信息系统的核心部分,是进行科学研究和决策管理的重要技术手段。数据库是一个单位或是一个应用领域的通用数据处理系统,它存储的是属于企业和事业部门、团体和个人的有关数据的集合。数据库中的数据是从全局观点出发建立的,按一定的数据模型进行组织、描述和存储。其结构基于数据间的自然联系,从而可提供一切必要的存取路径,且数据不再针对某一应用,而是面向全组织,具有整体的结构化特征。数据库中的数据是为众多用户所共享其信息而建立的,已经摆脱了具体程序的限制和制约。不同的用户可以按各自的用法使用数据库中的数据;多个用户可以同时共享数据库中的数据资源,即不同的用户可以同时存取数据库中的同一个数据。数据共享性不仅满足了各用户对信息内容的要求,同时也满足了各用户之间信息通信的要求。

快速入门流行ORM框架~Flask-SQLAlchemy

文 | 远山近海

ORM概念

ORM是编程语言和数据库间的桥梁,它可以帮助我们实现自动生成SQL语句,自动建库,自动建表,甚至使我们在使用的时候无需关注我们使用的是什么数据库以及什么版本。
ORM可以使我们像 操作对象 那样操作数据库,省去了繁杂的SQL查询、建表、插入、删除等语句的编写,把精力全部投入到业务逻辑的编写中去。
由于不同的数据库的SQL是有所不同的,而有了ORM,我们就只需掌握ORM的语句即可,ORM会根据配置语句来判断你使用的是什么数据库,并根据建表、查询等相关语句来生成对应的该数据库所能识别的SQL来操作数据库。
当系统更换数据库的时候,只要修改ORM框架的相关配置语句即可,如果不使用ORM,更换数据库时就要修改大量的SQL语句,费时费力,把人折腾逼疯不在话下。
Java的ORM框架有Hibernate,Mybatis等。其中Hibernate完全不需要手写SQL语句,属于全自动化ORM框架。Mybatis仍需要手写SQL语句,属于半自动化ORM框架,也可以理解为可通过SQL语句灵活操作数据库的ORM框架 。

注意(敲黑板):

  1. ORM是未来发展的方向,大势所趋,现在的公司一般都使用ORM框架。所以,学习ORM框架才是向新技术靠拢,顺应大势的做法。
  2. 使用了ORM框架不意味着对SQL的放弃,一般性的SQL语句还是要掌握的。


Python的ORM工具--SQLAlchemy

SQLAlchemy是python的ORM工具,python与数据库间的桥梁,任何Python系统中都可以使用。

Flask-sqlalchemy——sqlalchemy的衍生物

Flask-sqlalchemy是对SQLAlchemy的进一步封装,可以理解为sqlalchemy的flask定制版,可以使工作再度简化。
使用前需安装 pip install Flask-sqlalchemy,同时,系统会自动将Flask-sqlalchemy的依赖SQLAlchemy也一并安装。
SQLAlchemy以及其衍生物Flask-SQLAlchemy都是重量级Python ORM框架,功能全面且易用性好,在易用性上,它至少比Django’s ORM好用。
Django’sORM我也学过,我可以负责任地告诉大家,Flask-SQLAlchemy绝对比Django’ORM好用。
举例来说Flask-SQLAlchemy的大于小于,以及大于等于和小于等于的写法是这样的:<、>、<=、>=,而Django’s ORM对应的写法则是:

__gt=xx  为大于xx

__gte=xx 为大于等于xx

__lt=xx  为小于xx

__lte=xx 为小于等于xx

另外,Flask-SQLAlchemy的多表查询也很方便,而Django’s ORM的多表查询则很麻烦,麻烦到我现在也不太清楚怎么使用的程度,并且我知道有的公司,他们在使用Django’sORM时,只在单表查询中使用,而多表查询时仍然使用sql语句。
在这里再强调一下, 在任何Python系统中,我们都可以使用Flask-SQLAlchemy,并不是必须得和Flask框架绑定 ,不使用Flask框架照样可以使用Flask-SQLAlchemy,这就像我们没有购买ThinkPad的笔记本,我们照样可以单独购买一个ThinkPad的鼠标。


初始化

 
   
   
 
使用时需引入 from flask_sqlalchemy import SQLAlchemy

注意:

1.   引入时使用的是下划线_,pip安装时使用的是上划线-

2.   import SQLAlchemy中,SQLA是大写

使用时,要先在根目录下创建一个数据库目录,如叫做db

快速入门流行ORM框架~Flask-SQLAlchemy

并需写如下代码:
 
   
   
 
app = Flask(__name__) # 创建了一个Flask类的实例
app.secret_key="123"
app.config["SQLALCHEMY_DATABASE_URI"] = "mysql+pymysql://tester1:123456@127.0.0.1:3306/tpdb?charset=utf8"app.config["SQLALCHEMY_TRACK_MODIFICATIONS"]=Trueapp.config["SQLALCHEMY_ECHO"]=Truedb=SQLAlchemy(app)
 
详述:

app.config["SQLALCHEMY_DATABASE_URI"]= "mysql+pymysql://tester1:123456@127.0.0.1:3306/tpdb?charset=utf8"


红色的部分都是固定写法,代表这是数据库连接器
绿色部分代表使用mysql数据库,连接器使用pymysql
淡蓝色代表登录数据库的用户名和密码
紫色代表数据库的地址和端口
橙色代表代表数据库名
深蓝色代表编码格式,通常为utf8

oracle和sql server也是上面这个套路。
注意:
  1. utf8中间没有-

  2. 各个部分间的连接符号不能错

  3. 连接器也可以使用其他的,这里不再赘述


 
   
   
 
第四句 app.config["SQLALCHEMY_TRACK_MODIFICATIONS"]=True
是跟踪改变。
第五句 app.config["SQLALCHEMY_ECHO"]=True是指打印SQLAlchemy操作的对应SQL语句,这在编程过程中很有用,但在部署后就无用了,所以可在部署前注释掉。
第六句 是把数据库和站点关联起来:
  1. 1.  先把站点名称app传给SQLAlchemy
  2. 2.  db是步骤1的实例化,以后我们操作数据库,就都使用db这个实例化对象
注意:
  1. 在使用SQLAlchemy之前,必须先创建好数据库,SQLAlchemy可以帮我们建表,查询,但不能帮我们建库,如上例中的tpdb这个库,是提前先用命令行创建好的
  2. db=SQLAlchemy(app)这句,有另一种分开两句的写法:

db=SQLAlchemy()

db.init_app(app)

虽然这看起来语法没错,而且建表不会报错,但插入数据会报错。  
注意:这里再强调一下,在一个工程中,app只能有一个,在本章中,为了讲解SQLAlchemy,我们直接创建了app,但在实际开发中,通常是将创建app的语句写在一个单独的文件里,所有需要使用app的对象都去那个单独的文件里调用。
(下期预告:创建表)


无论上课或自学,

你首先需要准备:

每天 2 小时+的学习时间

每天坚持写代码的习惯!

有投入才有产出,

10k+的涨幅需要 1 年以上的努力!

祝你成功!


光荣之路出品







以上是关于flask-sqlalchemy数据库自动更新的主要内容,如果未能解决你的问题,请参考以下文章

无法使用 flask-sqlalchemy 创建自动递增主键

使用 Flask-SQLAlchemy 在 Alembic 自动生成迁移中未检测到任何变化

快速入门流行ORM框架~Flask-SQLAlchemy

python flask-sqlalchemy如何设置使自动建的mysql表字符集charset为utf8

Python——flask-sqlalchemy 自动生成符合Sqlachemy的Model:sqlautocode/sqlacodegen使用方式

flask-sqlalchemy:数据未更新[重复]