Python學習第十七天

Django框架-SQLite3

介紹

? ? ? ? Django內置了對 SQLite3 數據庫的支持。SQLite3 是一個輕量級的嵌入式數據庫引擎,非常適合開發、測試和小型項目。以下是關于 Django 中 SQLite3 的介紹和應用指南。(除了這些還支持mysql、oracle以及其他查詢文檔,本質上是一個內置數據庫并且它是一個文件數據庫,無需安裝直接可以使用)

鏈接工具

命令行工具-sqlite

安裝

注意了我們安裝的算是一個工具只是對于sqlite3數據庫的一個命令行管理工具。(也可以使用datagrip或者其他的工具)

下載地址

下載后需要注意對應的解壓包中需要有.exe文件

使用sqlite3

配置環境變量將sqlite3.exe配置到path中就可以在cmd命令隨時使用了

使用.help查看幫助指令

使用

常用的命令

類型命令/語句說明
命令行命令.help顯示所有 SQLite3 命令行命令的幫助信息。
.tables列出當前數據庫中的所有表。
.schema [表名]顯示指定表的創建語句。如果不指定表名,則顯示所有表的創建語句。
.databases列出當前連接的數據庫文件。
.exit?或?.quit退出 SQLite3 命令行工具。
.mode MODE設置輸出模式(如?csv,?column,?line,?list?等)。
.headers on/off開啟或關閉查詢結果的列名顯示。
.output FILENAME將輸出重定向到指定文件。
.import FILE TABLE將文件中的數據導入到指定表中。
.show顯示當前 SQLite3 的配置(如輸出模式、分隔符等)。
.dump [表名]導出數據庫或指定表的 SQL 語句(用于備份)。
.read FILENAME執行指定文件中的 SQL 語句。
.open FILENAME打開或切換到指定的數據庫文件。
.backup DBNAME FILE備份數據庫到指定文件。
.restore DBNAME FILE從指定文件恢復數據庫。
SQL 語句CREATE TABLE 表名 (列定義);創建表。例如:CREATE TABLE users (id INTEGER PRIMARY KEY, name TEXT);
DROP TABLE 表名;刪除表。
INSERT INTO 表名 (列) VALUES (值);插入數據。例如:INSERT INTO users (name) VALUES ('Alice');
SELECT 列 FROM 表名 [WHERE 條件];查詢數據。例如:SELECT * FROM users WHERE id = 1;
UPDATE 表名 SET 列=值 [WHERE 條件];更新數據。例如:UPDATE users SET name='Bob' WHERE id = 1;
DELETE FROM 表名 [WHERE 條件];刪除數據。例如:DELETE FROM users WHERE id = 1;
ALTER TABLE 表名 ADD COLUMN 列定義;添加列。例如:ALTER TABLE users ADD COLUMN age INTEGER;
BEGIN TRANSACTION;開始事務。
COMMIT;提交事務。
ROLLBACK;回滾事務。
PRAGMA 指令;執行 PRAGMA 指令。例如:PRAGMA table_info(users);?顯示表結構信息。

常用工具-datagrip

鏈接

? ? ? ? 因為他是一個文件型數據庫,那么使用這個工具去查詢創建就沒什么可以說的了。常用的查詢create都可以。

使用

其他工具navicat、PyCharm中自帶的database、dbserver都可以一樣的只要把驅動下載下來都可以使用。

使用

建表:

-- 使用datagrip 直接創建或者sqlite命令行工具創建都可以
create table t_user(id INTEGER PRIMARY KEY AUTOINCREMENT,  -- 自增主鍵username varchar(100),password varchar(100),sex varchar(1)
);
# db相關操作
from django.db import connection
# 獲取游標對象 使用游標對象還記得之前的db相關的操作嘛 直接創建表
cursor = connection.cursor()

myapp下的views下增加success和register方法

# django最新版5.1
from django.http import HttpResponse
from django.views.decorators.csrf import csrf_exempt
#引入render
from django.shortcuts import render,redirect
from datetime import datetime
from django.db import connection
# 獲取游標對象
cursor = connection.cursor()# 定義一個文字或者html的元素或者標簽
# postman請求時必須添加csrf_exempt否則會返回403
# 當你在Postman中測試POST請求時,如果沒有手動添加 CSRF Token,Django 會認為這是一個潛在的 CSRF 攻擊,因此返回 403 Forbidden 錯誤。
@csrf_exempt
def index(request):if request.method == 'POST':username = request.POST.get('username')password = request.POST.get('password')retStr = f"<span style='font-size:48px;'>POST 我請求測試參數:username={username} password = {password}</span>"print(retStr)else:pwd = request.GET.get('pwd')retStr = "Get請求測試參數:%s" %pwdreturn HttpResponse(retStr)# 指向myindex.html
def myindex(request):# 第三個參數為鍵值對傳遞 傳遞上下文或者返回的數據 使用前端接受參數時 類似于java的template也有一個基于模版前端的{{name}}list = [{"name":"django","age":"18"},{"name":"java","age":"18"},{"name":"python","age":"18"}]return render(request, 'myindex.html',{"name":"","list":list,"ifkey":"django","testdate":datetime.strptime('2025-03-15',"%Y-%m-%d")})def register(request):if request.method == 'POST':username = request.POST.get('username')password = request.POST.get('password')sex = request.POST.get('sex')print("username:"+username,"password:"+password,"sex:"+sex)# 保存用戶數據到 t_user 表cursor.execute(" insert into t_user(username,password,sex) values(%s,%s,%s)",(username,password,sex))connection.commit()return redirect('success')  # 注冊成功后跳轉到成功頁面else:passreturn render(request, 'register.html', {'form': []})def success(request):return render(request, 'success.html')

myapp下的template中增加register和success以及myindex作為了主頁增加了注冊的超鏈接

register.html

<!DOCTYPE html>
<html lang="en">
<head><meta charset="UTF-8"><meta name="viewport" content="width=device-width, initial-scale=1.0"><title>User Registration</title><!-- 引入 Bootstrap 5 CSS --><link href="https://cdn.jsdelivr.net/npm/bootstrap@5.3.0-alpha1/dist/css/bootstrap.min.css" rel="stylesheet"><!-- 自定義 CSS --><style>body {background-color: #f8f9fa;font-family: 'Arial', sans-serif;}.register-container {max-width: 500px;margin: 100px auto;padding: 30px;background: #ffffff;border-radius: 10px;box-shadow: 0 4px 10px rgba(0, 0, 0, 0.1);}.register-container h2 {text-align: center;margin-bottom: 20px;color: #333;font-weight: bold;}.form-control {border-radius: 5px;padding: 10px;border: 1px solid #ddd;margin-bottom: 15px;}.form-control:focus {border-color: #007bff;box-shadow: 0 0 5px rgba(0, 123, 255, 0.25);}.btn-primary {width: 100%;padding: 10px;border-radius: 5px;background-color: #007bff;border: none;font-size: 16px;}.btn-primary:hover {background-color: #0056b3;}.alert {border-radius: 5px;margin-bottom: 20px;}.text-danger {font-size: 14px;margin-top: 5px;}</style>
</head>
<body><div class="register-container"><h2>Register</h2><form method="post" action="{% url 'register' %}">{% csrf_token %}  <!-- CSRF 令牌,防止跨站請求偽造攻擊 --><!-- 顯示表單錯誤 -->{% if form.errors %}<div class="alert alert-danger"><strong>Error!</strong> Please correct the errors below.</div>{% endif %}<!-- Username 字段 --><div class="form-group"><label for="id_username" class="form-label">Username</label><input type="text" name="username" id="id_username" class="form-control" value="{{ form.username.value|default_if_none:'' }}" required>{% if form.username.errors %}<div class="text-danger">{{ form.username.errors }}</div>{% endif %}</div><!-- Password 字段 --><div class="form-group"><label for="id_password" class="form-label">Password</label><input type="password" name="password" id="id_password" class="form-control" required>{% if form.password.errors %}<div class="text-danger">{{ form.password.errors }}</div>{% endif %}</div><!-- Sex 字段 --><div class="form-group"><label for="id_sex" class="form-label">Sex</label><select name="sex" id="id_sex" class="form-control" required><option value="">Select Sex</option><option value="M" {% if form.sex.value == "M" %}selected{% endif %}>Male</option><option value="F" {% if form.sex.value == "F" %}selected{% endif %}>Female</option><option value="O" {% if form.sex.value == "O" %}selected{% endif %}>Other</option></select>{% if form.sex.errors %}<div class="text-danger">{{ form.sex.errors }}</div>{% endif %}</div><!-- 提交按鈕 --><div class="form-group"><button type="submit" class="btn btn-primary">Register</button></div></form></div><!-- 引入 Bootstrap 5 JS(可選) --><script src="https://cdn.jsdelivr.net/npm/bootstrap@5.3.0-alpha1/dist/js/bootstrap.bundle.min.js"></script>
</body>
</html>

success.html

<!DOCTYPE html>
<html lang="en">
<head><meta charset="UTF-8"><meta name="viewport" content="width=device-width, initial-scale=1.0"><title>Registration Successful</title><!-- 引入 Bootstrap 5 CSS --><link href="https://cdn.jsdelivr.net/npm/bootstrap@5.3.0-alpha1/dist/css/bootstrap.min.css" rel="stylesheet"><!-- 自定義 CSS --><style>body {background-color: #f8f9fa;font-family: 'Arial', sans-serif;}.success-container {max-width: 500px;margin: 100px auto;padding: 30px;background: #ffffff;border-radius: 10px;box-shadow: 0 4px 10px rgba(0, 0, 0, 0.1);text-align: center;}.success-container h2 {color: #28a745;font-weight: bold;margin-bottom: 20px;}.btn-primary {padding: 10px 20px;border-radius: 5px;background-color: #007bff;border: none;font-size: 16px;}.btn-primary:hover {background-color: #0056b3;}</style>
</head>
<body><div class="success-container"><h2>恭喜您注冊成功</h2><p>感謝您的注冊.</p><a href="{% url 'register' %}" class="btn btn-primary">注冊其他用戶</a></div><!-- 引入 Bootstrap 5 JS(可選) --><script src="https://cdn.jsdelivr.net/npm/bootstrap@5.3.0-alpha1/dist/js/bootstrap.bundle.min.js"></script>
</body>
</html>

myindex.html


<span style = 'font-size: 48px;'><a href='http://127.0.0.1:8000/register/'>注冊</a>
</span>

utils.py內容變更

from django.urls import path
from . import viewsurlpatterns = [path("index/", views.index, name="index"),path("myindex/", views.myindex, name="myindex"),path('register/', views.register, name='register'),path('success/', views.success, name='success'),
]

后續把代碼傳到github倉庫上

本文來自互聯網用戶投稿,該文觀點僅代表作者本人,不代表本站立場。本站僅提供信息存儲空間服務,不擁有所有權,不承擔相關法律責任。
如若轉載,請注明出處:http://www.pswp.cn/web/72348.shtml
繁體地址,請注明出處:http://hk.pswp.cn/web/72348.shtml
英文地址,請注明出處:http://en.pswp.cn/web/72348.shtml

如若內容造成侵權/違法違規/事實不符,請聯系多彩編程網進行投訴反饋email:809451989@qq.com,一經查實,立即刪除!

相關文章

Docker 》》Docker Compose 》》network 網絡 compose

docker 默認的網絡 三種模式 # 列出所有當前主機上或Swarm集群上的網絡 docker network ls#查看網絡詳情 docker network inspect network名稱# 清除未使用的docker網絡 docker network prune -f# 創建網絡 ocker network create -d bridge 網絡名稱 docker network create –s…

Python數字信號處理之最佳等波紋濾波器階數估計原理

Matlab中的階數估計函數 在MATLAB中&#xff0c;使用firpmord函數可以估算等波紋FIR濾波器的最小階數。該方法基于Parks-McClellan算法&#xff0c;通過通帶和阻帶的頻率邊界、幅度響應及允許的最大誤差來自動計算參數。 rp 3; % Passband ripple in dB rs 40; …

JumpServer基礎功能介紹演示

堡壘機可以讓運維人員通過統一的平臺對設備進行維護&#xff0c;集中的進行權限的管理&#xff0c;同時也會對每個操作進行記錄&#xff0c;方便后期的溯源和審查&#xff0c;JumpServer是由飛致云推出的開源堡壘機&#xff0c;通過簡單的安裝配置即可投入使用&#xff0c;本文…

C++和C的區別

C和C語言雖然共享相似的語法&#xff0c;但在設計理念和功能特性上有顯著區別。以下是兩者的主要差異&#xff1a; 1. 編程范式 C&#xff1a;純過程式編程&#xff0c;強調函數和步驟。C&#xff1a;支持多范式&#xff0c;包括面向對象編程&#xff08;類、繼承、多態&…

Android LeakCanary 使用 · 原理詳解

一、簡介 LeakCanary 是 Square 公司開源的 Android 內存泄漏檢測工具&#xff0c;通過自動化監控和堆轉儲分析&#xff0c;幫助開發者快速定位內存泄漏根源。其核心設計輕量高效&#xff0c;已成為 Android 開發中必備的調試工具。 二、使用方式 1. 集成步驟 在項目的 buil…

每日一題---dd愛框框(Java中輸入數據過多)

dd愛框框 實例&#xff1a; 輸入&#xff1a; 10 20 1 1 6 10 9 3 3 5 3 7 輸出&#xff1a; 3 5 這道題要解決Java中輸入的數過多時&#xff0c;時間不足的的問題。 應用這個輸入模板即可解決&#xff1a; Java中輸入大量數據 import java.util.*; import java.io.*;pu…

redis部署架構

一、redis多實例部署 實例1 安裝目錄&#xff1a;/app/6380 數據目錄&#xff1a;/app/6380/data 實例2 安裝目錄&#xff1a;/app/6381 數據目錄&#xff1a;/app/6381/data 1、創建實例安裝目錄 2、拷貝實例的配置文件 3、編輯實例的配置文件 第…

vscode python相對路徑的問題

vscode python相對路徑的問題 最近使用使用vscode連接wsl2寫python時&#xff0c;經常遇到找不到包中的方法的問題&#xff0c;最終發現vscode在執行python代碼時目錄不是從當前python文件開始算起&#xff0c;而是從當前工作區的目錄開始算起&#xff0c;比如說我打開的是/ho…

面試vue2開發時怎么加載編譯速度(webpack)

可以輸入命令獲取默認 webpack 設置 vue inspect > set.js 1.使用緩存 configureWebpack: {cache: {type: filesystem, // 使用文件系統緩存類型buildDependencies: {config: [__filename] // 緩存依賴&#xff0c;例如webpack配置文件路徑}}}, 2.啟用 vue-loader (測試明…

uv命令介紹(高性能Python包管理工具,旨在替代pip、pip-tools和virtualenv等傳統工具)

文章目錄 **主要功能**1. **快速安裝和管理 Python 包**2. **生成和管理鎖文件 (requirements.lock)**3. **創建虛擬環境**4. **與 poetry 兼容** **核心優勢**1. **極快的速度**&#xff1a;基于 Rust 實現&#xff0c;利用多線程和緩存大幅加速依賴解析。2. **輕量且獨立**&a…

企業數據管理的成本與效率革命

在數字經濟時代&#xff0c;企業每天產生的數據量正以指數級速度增長。IDC預測&#xff0c;到2025年全球數據總量將突破180 ZB。面對海量數據存儲需求和有限的IT預算&#xff0c;企業逐漸意識到&#xff1a;將每字節數據都存儲在昂貴的高性能存儲設備上&#xff0c;既不經濟也不…

深度學習-服務器訓練SparseDrive過程記錄

1、cuda安裝 1.1 卸載安裝失敗的cuda 參考&#xff1a;https://blog.csdn.net/weixin_40826634/article/details/127493809 注意&#xff1a;因為/usr/local/cuda-xx.x/bin/下沒有卸載腳本&#xff0c;很可能是apt安裝的&#xff0c;所以通過執行下面的命令刪除&#xff1a; a…

洛谷每日1題-------Day20__P1401 [入門賽 #18] 禁止在 int 乘 int 時不開 long long

題目描述 在比賽中&#xff0c;根據數據范圍&#xff0c;分析清楚變量的取值范圍&#xff0c;是非常重要的。int 類型變量與 int 類型變量相乘&#xff0c;往往可能超出 int 類型可以表示的取值范圍。 現在&#xff0c;給出兩個 int 類型變量 x,y 及其取值范圍&#xff0c;請…

3.15刷題

P6337 [COCI 2007/2008 #2] CRNE - 洛谷 #include<bits/stdc.h> using namespace std; int main(){int n;cin>>n;//橫加豎 最大。n/2,n/21if(n%20){cout<<(n/21)*(n/21);}else cout<<(n/22)*(n/21);return 0; }P6338 [COCI 2007/2008 #2] PRVA - 洛…

Browser Copilot 開源瀏覽器擴展,使用現有或定制的 AI 助手來完成日常 Web 應用程序任務。

一、軟件介紹 文末提供源碼和開源擴展程序下載 Browser Copilot 是一個開源瀏覽器擴展&#xff0c;允許您使用現有或定制的 AI 助手來幫助您完成日常 Web 應用程序任務。 目標是提供多功能的 UI 和簡單的框架&#xff0c;以實現和使用越來越多的 copilots&#xff08;AI 助手&…

selenium等待

通常代碼執行的速度?頁?渲染的速度要快,如果避免因為渲染過慢出現的?動化誤報的問題呢?可以使?selenium中提供的三種等待?法: 1. 隱式等待(Implicit Wait) 隱式等待適用于全局,它告訴 WebDriver 在查找元素時等待一定的時間,直到元素出現。 如果超時,WebDriver 不…

解鎖C++:指針與數組、字符串的深度探秘

目錄 一、指針與數組:親密無間的伙伴 1.1 指針是數組的 “快捷通道” 1.2 數組名與指針:微妙的差別 1.3 動態數組:指針大顯身手 二、指針與字符串:千絲萬縷的聯系 2.1 字符指針與 C 風格字符串 2.2 指針與 std::string 類 2.3 字符串常量與指針 三、指針在數組和字…

20250315-OpenAI-AgentSDK實驗

湊熱鬧。可以用GLM跑。 這里暫時用GLM底座“魔鬼修改”&#xff0c;代碼庫僅供參考&#xff08;共同進步吧&#xff09; openai-agents-python-glm: 基于GLM底座運行SDK&#xff0c;學習實驗SDK內的mAGT功能。https://gitee.com/leomk2004/openai-agents-python-glm 自言自語&a…

Qt QML實現彈球消磚塊小游戲

前言 彈球消磚塊游戲想必大家都玩過&#xff0c;很簡單的小游戲&#xff0c;通過移動擋板反彈下落的小球&#xff0c;然后撞擊磚塊將其消除。本文使用QML來簡單實現這個小游戲。 效果圖&#xff1a; 正文 代碼目錄結構如下&#xff1a; 首先是小球部分&#xff0c;邏輯比較麻…

04_Linux驅動_05_pinctrl子系統

以下代碼都在pinctrl相關的驅動函數和設備樹中 pinctrl-rockchip.c驅動&#xff0c;對應的是那個&#xff08;那些&#xff09;設備樹呢&#xff1f; 答案&#xff1a;通過.compatible "rockchip,rk3568-pinctrl"連接到rk3568.dtsi根節點下的pinctrl節點 一&#…