flask-SQLAlchemy是在原生SQLAlchemy的基础之上做了一层封装,安装flask-SQLAlchemy会自动安装SQLAlchemy

安装

传统的sql建表建字段

通过flask-SQLAlchemy建表建字段

用法:声明和初始化一系列的配置

flask-SQLAlchemy建表建字段

db.String()  整形
db.Integer() 字符串
db.TEXT() 文本
db.DateTime() 日期时间
db.Float() 浮点
db.Boolean() 布尔
db.PickleType() pickle序列对象
db.LargeBinary() 大二进制对象

触发

现在状态是没有数据库的

访问

数据库已生成

打开,字段创建成功

from datetime import datetime
from flask import Flask, render_template
from flask_sqlalchemy import SQLAlchemy app = Flask(__name__) # 初始化app """
SQLAlchemy_DATABASE_URI:指定数据库地址,SQLAlchemy的固定字段
sqlite: sqlite:///数据库路径/数据库.db
基本形式:
mysql/oracle+驱动://用户名:密码@主机:端口/数据库
mysql数据库:mysql://root:123@127.0.0.1:3306/my_db
"""
app.config['SQLALCHEMY_DATABASE_URI'] = 'sqlite:///./db/test.db' # 声明数据库类型和地址
app.config['SQLALCHEMY_TRACK_MODIFICATIONS'] = True # 跟踪改变
app.config['SQLALCHEMY_ECHO'] = True # 打印对应的sql,此操作用sql是怎么样的
db = SQLAlchemy(app) # 创建数据库核心对象并把数据库和app关联起来
"""
sql实现建表建字段:
crate table User(
id INTEGER Primary Key,
username TEXT,
email TEXT,
password TEXT,
create_time DATETIME
);
""" # SQLAlchemy实现建表建字段
class User(db.Model):
__tablename__ = 'user' # 表名
id = db.Column(db.Integer, primary_key=True) # id字段,integer类型,主键
username = db.Column(db.String(50), unique=True) # 50个字符长度 unique=True 唯一
email = db.Column(db.String(200), unique=True)
password = db.Column(db.String(100))
create_time = db.Column(db.DateTime, default=datetime.now) # 给个默认值为datetime.now def __init__(self, username, email, password, create_time=datetime.now()):
self.username = username
self.email = email
self.password = password
self.create_time = create_time def __repr__(self):
return f'用户:{self.id}, {self.username}, {self.password}, {self.email}' # 访问接口时,创建数据库
@app.route('/db/')
def initialize_db():
db.create_all() # 执行建表操作
return 'ok' if __name__ == '__main__':
app.run(
debug=True
)

插入数据

查询所有

查询一条

改:

from main import *

# 增
u = User('tom1', 'tom@tom.com', '123456')
db.session.add(u)
db.session.commit() u2 = User('jerry1', 'jerry@jerry.com', '123456')
db.session.add(u2)
db.session.commit() # 查询所有
for u in db.session.query(User).all():
print(u) # 查询一条
user = db.session.query(User).filter(User.id == 2).one()
print(user) # 改
user = db.session.query(User).filter(User.id == 2).one()
user.password = '654321'
db.session.commit()

渲染到前台页面

# 展示所有用户信息
@app.route('/users/')
def user_list():
users = db.session.query(User).all()
print(users)
return render_template('user-list.html', users=users)

user-list.html

<!DOCTYPE html>
<html lang="en">
<head>
<meta charset="UTF-8">
<title>用户信息</title>
</head>
<body>
<h2>用户信息</h2>
<table border="1">
<tr>
<td>ID</td>
<td>姓名</td>
<td>邮箱</td>
<td>密码</td>
<td>创建时间</td>
</tr>
{% for user in users %}
<tr>
<td>{{ user.id }}</td>
<td>{{ user.username }}</td>
<td>{{ user.email }}</td>
<td>{{ user.password }}</td>
<td>{{ user.create_time }}</td>
</tr>
{% endfor %}
</table> </body>
</html>

测开之路一百四十二:ORM框架之SQLAlchemy建库、建表、数据库操作的更多相关文章

  1. 测开之路一百四十三:ORM框架之SQLAlchemy模型及表创建

    基于前一篇内容,可以使用模型的结构 目录结构 main,入口层 from flask import Flaskfrom flask_sqlalchemy import SQLAlchemy app = ...

  2. 测开之路一百五十二:基于jquery的ajax实现之load、get、ajax

    ajax除了用原生的js实现之外,也可以使用jquery实现,而且用jquery更方便 看一个简单的示例,保留上一篇的content路由和html,实现上一篇一样的功能,点击获取内容,局部刷新 准备一 ...

  3. 测开之路一百四十九:jinja2模板之宏

    jinja2是python的模板引擎, 在写python web使用的过程中,macro可以节省大量的代码 比如上一篇的渲染页面 <!DOCTYPE html><html lang= ...

  4. 测开之路一百四十八:WTForms表单验证

    使用WTForms表单验证,可以在数据建模时就设置验证信息和错误提示 创建模型时,设置验证内容,如必填.格式.长度 from flask_wtf import Formfrom wtforms imp ...

  5. 测开之路一百四十六:WTForms之表单应用

    WTForms主要是两个功能:1.生成HTML标签  2.对数据格式进行验证 官网:https://wtforms.readthedocs.io/en/stable/ 这篇介绍用wtform生成htm ...

  6. 测开之路一百四十五:SQLAlchemy与后台模板整合之新增、查询、删除

    实现在页面上点击展示页就展示内容,点击新增页就触发新增功能 项目结构 admin.__init__ from flask import Blueprint admin = Blueprint('adm ...

  7. 测开之路一百四十四:ORM之SQLAlchemy查询

    在上一篇的基础上,插入数据 查询 Department.query.all() # 用表对象查db.session.query(Department).all() # 用db对象查 查询前两条,直接p ...

  8. 测开之路一百一十二:bootstrap按钮

    bootstrap按钮 引入bootstrap和jquery 普通按钮和bootstrap风格按钮 调整大小 块级按钮 禁用按钮 disabled 按钮分组 分页按钮

  9. 测开之路一百五十五:jquery-validation前台数据验证

    前面做的wtform验证是服务器端的验证,需要把数据传输到服务器,服务器验证后再吧结果传输到前端,网络慢的时候,用户体验不好,所以需要前端验证,且后端验证不能少 传统的js或者jquery如果要验证信 ...

随机推荐

  1. 2019-11-29-WPF-轻量级-MVVM-框架入门-2.1.2

    title author date CreateTime categories WPF 轻量级 MVVM 框架入门 2.1.2 lindexi 2019-11-29 10:16:10 +0800 20 ...

  2. Maven项目构建利器02——安装Maven核心程序

    1.Maven也是用Java编写的工具,同样运行在JVM上,所以我们在安装Maven之前需要确保已经安装了JDK,首先来检查电脑上是否安装JDK. 2.如上图说明电脑中已经安装了JDK,下面就要去官网 ...

  3. CDN杂谈

    两大cdn公司:一个是Akamai,一个是LimeLight,所以有两个阵营 CDN在利用DNS的转授权来引导最终访问者找到最理想的缓存或者镜像点,他是一种基于域名的服务.在不同的实现方式下,最终的定 ...

  4. 百度贴吧自动回帖的两种方式,使用requests(urllib2)和selenium两种方式回帖

    本文介绍,回复贴吧指定某楼层主的帖子的方法.在这里不介绍无限发主贴和无限回复主贴的方法,无限发主题帖会爆吧,引起别人的反感,并且很容易遭到吧主的封杀:无限回主题帖,会让整个帖子的每楼的回复充满了自己的 ...

  5. 折半搜索+Hash表+状态压缩 | [Usaco2012 Open]Balanced Cow Subsets | BZOJ 2679 | Luogu SP11469

    题面:SP11469 SUBSET - Balanced Cow Subsets 题解: 对于任意一个数,它要么属于集合A,要么属于集合B,要么不选它.对应以上三种情况设置三个系数1.-1.0,于是将 ...

  6. Flask【第10篇】:自定义Form组件

    自定义Form组件 一.wtforms源码流程 1.实例化流程分析 1 # 源码流程 2 1. 执行type的 __call__ 方法,读取字段到静态字段 cls._unbound_fields 中: ...

  7. 关于mysql备份与恢复的操作

    逻辑备份:将数据库的数据以逻辑的SQL语句的方式导出 mysqldump备份数据库 备份数据并带创建数据库 (含数据) mysqldump -uroot -p'123456' -B dbname &g ...

  8. 9 斐波那契数列Fibonacci

    题目1:写一个函数,输入n,求Fibonacci数列的第n项.该数列定义如下: n=0时,f(n)=0; n=1时,f(n)=1; n>1时,f(n)=f(n-1)+f(n-2) 1. 效率差的 ...

  9. 【leetcode】Network Delay Time

    题目: There are N network nodes, labelled 1 to N. Given times, a list of travel times as directed edge ...

  10. WEB上传大文件

    众所皆知,web上传大文件,一直是一个痛.上传文件大小限制,页面响应时间超时.这些都是web开发所必须直面的. 本文给出的解决方案是:前端实现数据流分片长传,后面接收完毕后合并文件的思路.下面贴出简易 ...