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. 云主机使用ansible出现秘钥认证问题

    使用ansible的时候,出现如下秘钥失效的问题: root@jumpserver ftp]# ansible web -m ping The authenticity of host 'web-00 ...

  2. 005-监控项item详解,手动创建item实例

    模板里的监控项都可以用 zabbix-get 命令执行 来获取相应的值,方法如下: [root@linux-node2 ~]# zabbix_get -s 192.168.1.230 -k agent ...

  3. 使用IL DASM来查看接口内的自动属性

    在我的本地地址中 C:\Program Files (x86)\Microsoft SDKs\Windows\v10.0A\bin\NETFX 4.6.2 Tools\x64下有一个文件  ildas ...

  4. Python条件控制与循环

    条件控制语句:if 循环语句:while.for 其他语句:continue.break.pass 1.if语句 # ================================ a = 1 if ...

  5. JAVA笔记14-线程

    一.概念 线程:是一个程序里面不同的执行路径,每一个分支都叫线程.到现在为止我们所讲的程序分支只有一个,即main方法,称作主线程. 进程:class文件,exe文件.程序的执行过程:程序放入代码区( ...

  6. linux lazarus 连接mssqlserver

    1 . 从https://www.freetds.org/ 下载驱动源文件 2. 参照 https://www.freetds.org/userguide/config.htm 内容编译 3. 启动l ...

  7. 20180804 excel规划求解。。。

    把一个已经变量更出数据去求解

  8. jquery last 选择器 语法

    jquery last 选择器 语法 作用: :last 选择器选取最后一个元素.最常见的用法:与其他元素一起使用,选取指定组合中的最后一个元素(就像上面的例子). 语法:$(":last& ...

  9. (45)FreeRTOS学习之二

    一:架构概述 FreeRTOS是一个相对较小的应用程序.最小化的FreeRTOS内核仅包括3个(.c)文件和少数头文件,总共不到9000行代码,还包括了注释和空行.一个典型的编译后(二进制)代码映像小 ...

  10. Springboot 构建http服务,返回的http行是'HTTP/1.1 200' 无状态码描述 客户端解析错误

    ————————————————————————————————————————— *** 响应的数据格式  HTTP/1.1 200 OK  Server: Apache-Coyote/1.1  A ...