Flask web开发之路六

今天写SQLAlchemy数据库

首先介绍ORM的概念:

ORM,Object类,Relationship:关系,Mapping:映射,也就是模型关系映射

flask-sqlalchemy是一套ORM框架

ORM的好处:可以让我们操作数据库跟操作对象一样,非常方便,因为一个表就抽象成一个类,一条数据就抽象成该类的一个对象

### Flask-SQLAlchemy的使用:
1. 初始化和设置数据库配置信息:
* 使用flask_sqlalchemy中的SQLAlchemy进行初始化:
```
from flask_sqlalchemy import SQLAlchemy
app = Flask(__name__)
db = SQLAlchemy(app)
```
2. 设置配置信息:在`config.py`文件中添加以下配置信息:
```
# dialect+driver://username:[email protected]:port/database
DIALECT = ‘数据库类型‘
DRIVER = ‘pymysql‘(python2.7是mysqldb)
USERNAME = ‘用户名‘
PASSWORD = ‘密码‘
HOST = ‘127.0.0.1‘
PORT = ‘3306‘
DATABASE = ‘数据库名称‘

SQLALCHEMY_DATABASE_URI = "{}+{}://{}:{}@{}:{}/{}?charset=utf8".format(DIALECT,DRIVER,USERNAME,PASSWORD,HOST
,PORT,DATABASE)

SQLALCHEMY_TRACK_MODIFICATIONS = False
```

3. 在主`app`文件中,添加配置文件:
```
app = Flask(__name__)
app.config.from_object(config)
db = SQLAlchemy(app)
```
4. 做测试,看有没有问题:
```
db.create_all()
```
如果没有报错,说明配置没有问题,如果有错误,可以根据错误进行修改。

### 使用Flask-SQLAlchemy创建模型与表的映射:
1. 模型需要继承自`db.Model`,然后需要映射到表中的属性,必须写成`db.Column`的数据类型。
2. 数据类型:
* ‘db.Integer‘代表的是整形.
* ‘db.String‘代表的是‘varchar‘,需要指定最长的长度。
* `db.Text`代表的是`text`。
3. 其他参数:
* `primary_key`:代表的是将这个字段设置为主键。
* `autoincrement`:代表的是这个主键为自增长的。
* `nullable`:代表的是这个字段是否可以为空,默认可以为空,可以将这个值设置为`False`,在数据库中,这个值就不能为空了。
4. 最后需要调用`db.create_all`来将模型真正的创建到数据库中。

数据库的增删改查:

主app文件代码如下:

from flask import Flask
from flask_sqlalchemy import SQLAlchemy
import config

app = Flask(__name__)
app.config.from_object(config)

db = SQLAlchemy(app)

# article表:
# create table article(
#     id int primary key autoincrement,
#     title varchar(100) not null,
#     content text not null,
# )
class Article(db.Model):
    __tablename__ = ‘article‘
    id = db.Column(db.Integer,primary_key=True,autoincrement=True)
    title = db.Column(db.String(100),nullable=False)
    content = db.Column(db.Text,nullable=False)

db.create_all()

@app.route(‘/‘)
def hello_world():
    # #增加:
    article1 = Article(title=‘aaa‘,content=‘bbb‘)
    db.session.add(article1)
    #事务
    db.session.commit()

    # #查
    # # select * from article where title=‘aaa‘;
    # result = Article.query.filter(Article.title ==‘aaa‘).all()
    # article1 = result[0]
    # print(article1.title,article1.content)

    # #改:
    # #1.先把你要更改的数据查找出来
    # article1 = Article.query.filter(Article.title == ‘aaa‘).first()
    # #2.把这条数据,按你需要的地方进行修改
    # article1.title = ‘new title‘
    # #3.做事务的提交
    # db.session.commit()

    # #删:
    # #1.把需要删除的数据查找出来
    # article1 = Article.query.filter(Article.content == ‘bbb‘).first()
    # #2.把这条数据删除掉
    # db.session.delete(article1)
    # #3.做事务提交
    # db.session.commit()

    return ‘Hello World!‘

if __name__ == ‘__main__‘:
    app.run()

### Flask-SQLAlchemy数据的增、删、改、查:
1. 增:
```
# 增加:
article1 = Article(title=‘aaa‘,content=‘bbb‘)
db.session.add(article1)
# 事务
db.session.commit()
```

注意,这里数据库的操作都在主视图函数里执行,因此只有在打开网页的情况下,数据库的操作才能被执行

2. 查:
```
# 查
# select * from article where article.title=‘aaa‘;
article1 = Article.query.filter(Article.title == ‘aaa‘).first()
print ‘title:%s‘ % article1.title
print ‘content:%s‘ % article1.content
```
3. 改:
```
# 改:
# 1. 先把你要更改的数据查找出来
article1 = Article.query.filter(Article.title == ‘aaa‘).first()
# 2. 把这条数据,你需要修改的地方进行修改
article1.title = ‘new title‘
# 3. 做事务的提交
db.session.commit()
```
4. 删:
```
# 删
# 1. 把需要删除的数据查找出来
article1 = Article.query.filter(Article.content == ‘bbb‘).first()
# 2. 把这条数据删除掉
db.session.delete(article1)
# 3. 做事务提交
db.session.commit()
```

原文地址:https://www.cnblogs.com/yqpy/p/8655158.html

时间: 2024-09-29 17:17:50

Flask web开发之路六的相关文章

记踩坑--Flask Web开发:第六章的电子邮件 ----[Errno 11004] getaddrinfo failed

必须要记录下踩过的坑,一来,为后来者铺路,二来,实在摔得疼,提醒自己写代码要谨小慎微. [Errno 11004] getaddrinfo failed 1.先排除邮箱账号和授权码的错误 测试如下代码:(注:邮箱号和授权码换成你自己的) # -*- coding: utf-8 -*- from flask import Flask from flask_mail import Mail, Message app = Flask(__name__) app.config['MAIL_SERVER'

Flask web开发之路二

今天创建第一个flask项目,主app文件代码如下: # 从flask这个框架导入Flask这个类 from flask import Flask #初始化一个Flask对象 # Flasks() # 需要传递一个参数__name__ # 1. 方便flask框架去寻找资源 # 2. 方便flask插件比如Flask-Sqlalchemy出现错误的时候,好去寻找问题所在的位置 app = Flask(__name__) # @app.route是一个装饰器 # @开头,并且在函数的的上面,说明是

Flask web开发之路三

今天写一个URL传参.反转URL.页面跳转和重定向 URL传参 主app文件代码: from flask import Flask app = Flask(__name__) @app.route('/') def hello_world(): return 'Hello World!' @app.route('/article/<id>') def article(id): return '您请求的参数是: %s' %id if __name__ == '__main__': app.run

Flask web开发之路九

首先介绍循环引用的问题: 当一个模块需要引用另一个模块的类,而另一个模块又需要引用这个模块的类时,就出现了循环引用,而没法导入类,这时候可以切断其中一条引用路径,增加一个模块 项目结构: models_sep.py代码: from flask import Flask from models import Article from exts import db import config app = Flask(__name__) app.config.from_object(config) d

Flask web开发之路十四

今天开始Flask的实战,创建一个项目,实现包括用户登录.注册.注销.发表博客.评论以及检索等功能 首先给出项目结构: 1.config.py文件: 存放各种配置信息 import os # dialect+driver://username:[email protected]:port/database DIALECT = 'mysql' DRIVER = 'pymysql' USERNAME = '用户名' PASSWORD = '密码' HOST = '域名' PORT = '端口号' D

《Flask Web开发 基于Python的Web应用开发实战》简评

指路牌 <Flask Web开发><Flask Web开发 基于Python的Web应用开发实战><Flask Web开发>是否适合新手入门Python Web开发? 正文 <Flask Web开发 基于Python的Web应用开发实战>,O'Reilly"动物书系列"的"狗书",应该是很多Flask初学者被推荐使用的入门书,但是这本书真的适合初学者吗? Python的Web框架非常多,例如Django.Flask.T

Flask web开发----使用mysql数据库

根据<flask web开发>书中说不建议在生产环境中使用SQLite,所以在我跟着书本敲完api这一章的代码时,准备将数据库改用成mysql 1.现将这俩个文件删除,因为这是之前使用的SQLite数据库相关的文件 2.将原项目中的config文件中数据库的地址修改为如图所示的Mysql数据库.你需要现在你本机电脑上安装Mysql数据库,而且你存在一个用户的账户为:root,密码为:root,创建的数据库名称为Flask.(这里对mysql不做过多的讲解) 出于安全考虑可以将路径通过 (ven

flask web开发笔记 -- 快速入门

flask web开发笔记 -- 快速入门 初始化 Flask应用需要创建应用实例. Web服务器通过Web Server Gateway Interface (WSGI)协议把从客户端接收到的请求传递给该对象.应用程序实例是Flask类对象,通常创建如下: from flask import Flask app = Flask(__name__) Flask类的构造函数唯一的参数是应用的主模块名或包名,用于确定应用的根目录.对于大多数应用程序,使用Python的__name__变量即可. 路由

WEB开发之路——基础部分

WEB开发之路 受BBC的<BBC: Brain Story>和<BBC: The Brain - A Secret History>的影响,我一直有志于探究人类大脑,2015年的暑假,到华南理工大学的国家重点实验室-生物医学工程实验室,实习了一个月的时间,学习大脑图像处理—Matlab语言来处理大脑的灰质和白质的图像,核心知识在计算机方面,只有掌握计算机这门工具,才能更好的分析大脑.因此,在我的坚决要求之下,2016年的暑假,家人给我联系了一家软件公司实习,从最有活力的WEB开发