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倉庫上