测开之路一百四十二:ORM框架之SQLAlchemy建库、建表、数据库操作
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建库、建表、数据库操作的更多相关文章
- 测开之路一百四十三:ORM框架之SQLAlchemy模型及表创建
基于前一篇内容,可以使用模型的结构 目录结构 main,入口层 from flask import Flaskfrom flask_sqlalchemy import SQLAlchemy app = ...
- 测开之路一百五十二:基于jquery的ajax实现之load、get、ajax
ajax除了用原生的js实现之外,也可以使用jquery实现,而且用jquery更方便 看一个简单的示例,保留上一篇的content路由和html,实现上一篇一样的功能,点击获取内容,局部刷新 准备一 ...
- 测开之路一百四十九:jinja2模板之宏
jinja2是python的模板引擎, 在写python web使用的过程中,macro可以节省大量的代码 比如上一篇的渲染页面 <!DOCTYPE html><html lang= ...
- 测开之路一百四十八:WTForms表单验证
使用WTForms表单验证,可以在数据建模时就设置验证信息和错误提示 创建模型时,设置验证内容,如必填.格式.长度 from flask_wtf import Formfrom wtforms imp ...
- 测开之路一百四十六:WTForms之表单应用
WTForms主要是两个功能:1.生成HTML标签 2.对数据格式进行验证 官网:https://wtforms.readthedocs.io/en/stable/ 这篇介绍用wtform生成htm ...
- 测开之路一百四十五:SQLAlchemy与后台模板整合之新增、查询、删除
实现在页面上点击展示页就展示内容,点击新增页就触发新增功能 项目结构 admin.__init__ from flask import Blueprint admin = Blueprint('adm ...
- 测开之路一百四十四:ORM之SQLAlchemy查询
在上一篇的基础上,插入数据 查询 Department.query.all() # 用表对象查db.session.query(Department).all() # 用db对象查 查询前两条,直接p ...
- 测开之路一百一十二:bootstrap按钮
bootstrap按钮 引入bootstrap和jquery 普通按钮和bootstrap风格按钮 调整大小 块级按钮 禁用按钮 disabled 按钮分组 分页按钮
- 测开之路一百五十五:jquery-validation前台数据验证
前面做的wtform验证是服务器端的验证,需要把数据传输到服务器,服务器验证后再吧结果传输到前端,网络慢的时候,用户体验不好,所以需要前端验证,且后端验证不能少 传统的js或者jquery如果要验证信 ...
随机推荐
- 查询GC日志、动态年龄计算
https://www.cnblogs.com/onmyway20xx/p/6590603.html 从实际案例聊聊Java应用的GC优化 动态年龄计算 关于上文中提到晋升年龄阈值为2,很多同学有疑问 ...
- Wide&Deep 模型学习教程
WDL 学习教程 推荐系统+WDL 教学视频: https://www.bilibili.com/video/av29905315/ WDL 模型介绍: https://blog.csdn.net/g ...
- zabbix利用percona-toolkit工具监控Mysql主从同步状态
一.下载percona-toolkit工具包 percona-toolkit是一组高级命令行工具的集合,可以查看当前服务的摘要信息,磁盘检测,分析慢查询日志,查找重复索引,实现表同步等等. [root ...
- git 与gitlab
1.gitlab 创建project ,命名为test2 2.git push项目 git remote add ******* mkdir test1 cd test1 git init nano ...
- java动态代理(JDK和cglib)(转载)
原文地址:http://www.cnblogs.com/jqyp/archive/2010/08/20/1805041.html 高亮部分是我的理解. JAVA的动态代理 代理模式 代理模式是常用的j ...
- 【NOIP2016提高A组集训第1场10.29】配对游戏
题目 流行的跳棋游戏是在一个有mn个方格的长方形棋盘上玩的.棋盘起初全部被动物或障碍物占满了.在一个方格中,'X'表示一个障碍物,一个'0'-'9'的个位数字表示一个不同种类的动物,相同的个位数字表示 ...
- 目标检测 | OHEM
参考:https://blog.csdn.net/app_12062011/article/details/77945600 参考:http://www.cnblogs.com/sddai/p/102 ...
- LeetCode - LRU怎么将书架上的旧书完美淘汰呢
你有一排书架,有空时会拿些书来看,经常性会买些新书.无奈书架容量有限,当新买的书放不下时,需要一个策略将旧书淘汰. LRU(最近最少使用)缓存淘汰机制正合适. 1)新买的书放在最左侧. 2)最近常看的 ...
- jeesite安装时Perhaps you are running on a JRE rather than a JDK
使用自己本地安装的maven,启动jeesite报错: No compiler is provided in this environment. Perhaps you are running on ...
- c#翻页效果
用c#和GDI+实现杂志翻页动画效果时间:2010-01-13 blog.csdn.net 周公 - 说明:以前本人参与个一个电子杂志项目,当时要求实现模拟现实生活中的杂志翻页动画效果,别人推荐了这篇 ...