網站首頁 編程語言 正文
Flask數據模型和連接數據庫
flask是基于MTV的結構,其中M指的就是模型,即數據模型,在項目中對應的是數據庫。flask與數據庫建立聯系有很多方法,但一般分為兩種,一種是使用pymsql對數據庫建立連接;還有一種是ORM映射的方式(基于pymysql),這種方式常用于web開發。以對象的形式與數據庫表做映射,方便對象在頁面中顯示。下面紀錄以mysql和orm方式連接數據庫。
一、安裝
準備工作,安裝一下庫:
pip3 install pymysql 建公路
pip3 install flask-sqlalchemy 實現ORM映射
pip3 install flask-migrate 發布命令工具
二、配置數據庫連接、創建模型類
步驟:
(1) 配置數據庫的連接路徑
# mysql+pymysql://user:password@hostip:port/databasename
# 數據庫+pymysql://用戶名:密碼@主機ip:端口/數據庫名
SQLALCHEMY_DATABASE_URI = 'mysql+pymysql://root:root@127.0.0.1:3306/flaskdemo'
(2) flask-sqlalchemy的搭建:在apps包下創建包ext(第三方庫的配置通常建個ext文件夾存放),用于存放與數據庫有關的代碼,在__init__.py中添加:
db = SQLAlchemy() ---->必須跟app聯系
在apps/init.py文件(這里我將啟動app和app初始化分開了,此處的__init__是app的初始化)下與app建立聯系:
def create_app():
....
# 跟app聯系
db.init_app(app)
return app
(3) 創建模型:models.py,模型就是類,經常稱作模型類
class User(db.Model): ------> user表
id = db.Column(db.Integer, primary_key=True, autoincrement=True)
username = db.Column(db.String(15), nullable=False)
password = db.Column(db.String(12), nullable=False)
phone = db.Column(db.String(11), unique=True)
rdatetime = db.Column(db.DateTime, default=datetime.now)
常見的數據類型:
Integer 整型
String(size) 字符串類型,務必指定大小
Text 長文本類型
DateTime 日期時間
Float 浮點類型
Boolean 布爾類型
PickleType 存儲pickle類型 主要跟序列化有關
LargeBinary 存儲大的二進制類型
可選的:
primary_key=True 主鍵
autoincrement=True 自增
nullable=False 不允許為空
unique=True 唯一
default=datetime.now 默認值 可以設置成當前系統時間或者其他的值
三、使用命令創建數據庫表
a. 在app.py 中導入模型:from apps.user.models import User —》讓模型與app關聯
b. 在終端使用命令:db 建立數據庫/更新數據庫
flask db init -----》 產生一個文件夾migrations
flask db migrate -----> 自動產生了一個版本文件
flask db upgrade ------> 同步,完成數據庫表創建
項目結構
| ---apps
| ---ext
| ---migrations flask db init 只需要init一次
|---versions 版本文件夾
|---71edde7ee937_.py ---》 flask db migrate 遷移
|---cc0dca61130f_.py
flask db upgrade 同步
flask db downgrade 降級
四、以注冊為例
1.創建app、migrate(綁定app、數據庫),app.run啟動入口
2.apps文件下__init__.py文件初始化app配置
3.數據庫配置
4.創建模型類
5.通過命令創建數據庫表
flask db init -----》 產生一個文件夾migrations
flask db migrate -----> 自動產生了一個版本文件
flask db upgrade ------> 同步,完成數據庫表創建
此刻在pycharm的數據庫視圖中可以看到創建好的數據庫表
6.編寫注冊邏輯(視圖)
# 用戶注冊
@user_bp.route('/register', methods=['GET', 'POST'])
def register():
if request.method == 'POST':
username = request.form.get('username')
password = request.form.get('password')
repassword = request.form.get('repassword')
phone = request.form.get('phone')
email = request.form.get('email')
if password == repassword:
# 注冊用戶
user = User()
user.username = username
# 自定義加密:new_password = hashlib.sha256(password.encode('utf-8')).hexdigest()
# 使用自帶的函數實現加密:generate_password_hash
user.password = generate_password_hash(password)
print(len(user.password))
user.phone = phone
user.email = email
# 添加并提交
db.session.add(user)
db.session.commit()
return redirect(url_for('user.index'))
return render_template('user/register.html')
7.編寫模板即html頁面即可實現簡單的注冊功能,實現MTV的整合
原文鏈接:https://blog.csdn.net/victory_CEO/article/details/127667238
相關推薦
- 2023-03-03 Fragment通過FragmentManager實現通信功能詳細講解_Android
- 2024-07-15 使用itext導出pdf出現的中文無法顯示的問題
- 2022-12-22 一文學會c語言結構體的定義和使用方法_C 語言
- 2022-10-10 NumPy?數組屬性的具體使用_python
- 2022-05-01 pandas中關于apply+lambda的應用_python
- 2022-08-19 Python利用memory_profiler查看內存占用情況_python
- 2023-03-22 Pytorch中實現CPU和GPU之間的切換的兩種方法_python
- 2023-04-02 攔截信號Golang應用優雅關閉的操作方法_Golang
- 最近更新
-
- window11 系統安裝 yarn
- 超詳細win安裝深度學習環境2025年最新版(
- Linux 中運行的top命令 怎么退出?
- MySQL 中decimal 的用法? 存儲小
- get 、set 、toString 方法的使
- @Resource和 @Autowired注解
- Java基礎操作-- 運算符,流程控制 Flo
- 1. Int 和Integer 的區別,Jav
- spring @retryable不生效的一種
- Spring Security之認證信息的處理
- Spring Security之認證過濾器
- Spring Security概述快速入門
- Spring Security之配置體系
- 【SpringBoot】SpringCache
- Spring Security之基于方法配置權
- redisson分布式鎖中waittime的設
- maven:解決release錯誤:Artif
- restTemplate使用總結
- Spring Security之安全異常處理
- MybatisPlus優雅實現加密?
- Spring ioc容器與Bean的生命周期。
- 【探索SpringCloud】服務發現-Nac
- Spring Security之基于HttpR
- Redis 底層數據結構-簡單動態字符串(SD
- arthas操作spring被代理目標對象命令
- Spring中的單例模式應用詳解
- 聊聊消息隊列,發送消息的4種方式
- bootspring第三方資源配置管理
- GIT同步修改后的遠程分支