筆記為自我總結(jié)整理的學(xué)習(xí)筆記,若有錯(cuò)誤歡迎指出喲~
【Django專欄】
Django——django簡(jiǎn)介、django安裝、創(chuàng)建項(xiàng)目、快速上手
Django——templates模板、靜態(tài)文件、django模板語法、請(qǐng)求和響應(yīng)
Django——連接mysql數(shù)據(jù)庫
連接MySQL數(shù)據(jù)庫
ORM(Object-Relational Mapping)是一種編程技術(shù),它允許開發(fā)者使用面向?qū)ο蟮姆绞絹聿僮鲾?shù)據(jù)庫,而不必直接編寫SQL語句。在Django中,ORM是通過Django自帶的django.db.models模塊來實(shí)現(xiàn)的。
- 創(chuàng)建、修改、刪除數(shù)據(jù)庫中的表【無法創(chuàng)建數(shù)據(jù)庫】
- 操作表中的數(shù)據(jù)
1.安裝MySQL驅(qū)動(dòng)程序
首先,確保你已經(jīng)安裝了適用于Python的MySQL驅(qū)動(dòng)程序??梢允褂胮ip命令來安裝,例如:
pip install mysqlclient -i https://pypi.tuna.tsinghua.edu.cn/simple
2.創(chuàng)建數(shù)據(jù)庫
需要在mysql中完成
3.配置settings.py文件
打開你的Django項(xiàng)目中的settings.py文件,找到DATABASES設(shè)置部分,并進(jìn)行如下配置:
DATABASES = {
'default': {
'ENGINE': 'django.db.backends.mysql',
'NAME': 'your_database_name',
'USER': 'your_mysql_username',
'PASSWORD': 'your_mysql_password',
'HOST': 'localhost',
'PORT': '3306',
}
}
確保將your_database_name
、your_mysql_username
和your_mysql_password
替換為你的MySQL數(shù)據(jù)庫的名稱、用戶名和密碼。
4.django操作表
django操作表語句與mysql語句的關(guān)系
在Django中,操作表的語句與直接在MySQL中執(zhí)行的SQL語句有著密切的關(guān)系。Django的ORM(Object-Relational Mapping)提供了一種Pythonic的方式來操作數(shù)據(jù)庫,它將Python代碼翻譯成對(duì)應(yīng)的SQL語句,并執(zhí)行這些SQL語句以實(shí)現(xiàn)數(shù)據(jù)庫操作。
下面是一些常見的數(shù)據(jù)庫操作,以及它們?cè)贒jango ORM中的對(duì)應(yīng)方式和在MySQL中的原生SQL語句:
創(chuàng)建表
Django ORM:
# 在models.py中定義模型
class UserInfo(models.Model):
name = models.CharField(max_length=64)
password = models.CharField(max_length=128)
age = models.IntegerField()
MySQL原生SQL:
CREATE TABLE application01_userinfo (
id INT AUTO_INCREMENT PRIMARY KEY,
name VARCHAR(64),
password VARCHAR(128),
age INT
使用Django的管理命令manage.py來執(zhí)行數(shù)據(jù)庫遷移操作,將模型映射到實(shí)際的數(shù)據(jù)庫表。在命令行中執(zhí)行以下命令:
python manage.py makemigrations # 生成數(shù)據(jù)庫遷移文件
python manage.py migrate # 應(yīng)用數(shù)據(jù)庫遷移
修改表
新增一個(gè)列
兩種選擇:
1) 立即提供一次性默認(rèn)值(將在該列具有null值的所有現(xiàn)有行上設(shè)置)
2) 退出,在models.py中添加一個(gè)默認(rèn)值或允許為空
# 添加默認(rèn)值
salary = models.IntegerField(default=5000)
# 允許為空
salary = models.IntegerField(null=True, blank=True)
插入數(shù)據(jù)
# 原生sql語句:insert into application01_userinfo(name, password, age) VALUES ('quanquan', '123', 18)
# UserInfo.objects.create(name=name, password=password, age=age)
def register(request):
# POST方式
if request.method == 'POST':
# 處理表單提交
name = request.POST.get('name', '')
password = request.POST.get('password', '')
age = request.POST.get('age')
# 構(gòu)造上下文數(shù)據(jù)
context = {
'name': name,
'password': password,
'age': age,
}
# 往數(shù)據(jù)庫插入數(shù)據(jù)
UserInfo.objects.create(name=name, password=password, age=age)
# 渲染模板并返回響應(yīng)
return render(request, 'result.html', context)
else:
# 顯示表單頁面
return render(request, 'register.html')
register.html
<!DOCTYPE html>
<html>
<head>
<title>輸入信息</title>
</head>
<body>
<h2>請(qǐng)輸入您的信息</h2>
<form method="post" action="/register/">
<!-- {% csrf_token %} 是 Django 模板標(biāo)記,用于防止跨站請(qǐng)求偽造(CSRF)攻擊。-->
<!-- Django 要求所有 POST 的表單都要包含這個(gè)標(biāo)記,以確保安全性。-->
{% csrf_token %}
<label for="name">姓名:</label>
<input type="text" id="name" name="name"><br><br>
<label for="password">密碼:</label>
<input type="text" id="password" name="password"><br><br>
<label for="age">年齡:</label>
<input type="text" id="age" name="age"><br><br>
<input type="submit" value="提交">
</form>
</body>
</html>
result.html
<!-- result.html -->
<!DOCTYPE html>
<html>
<head>
<title>提交結(jié)果</title>
</head>
<body>
<h2>提交結(jié)果</h2>
<p>您提交的信息如下:</p>
<p>姓名:{{ name }}</p>
<p>密碼:{{ password }}</p>
<p>年齡:{{ age }}</p>
</body>
</html>
刪除數(shù)據(jù)
# 刪除數(shù)據(jù)
UserInfo.objects.filter(id=1).delete()
UserInfo.objects.all().delete()
查詢數(shù)據(jù)
# 查詢數(shù)據(jù)
data_list = UserInfo.objects.all()
# data_list = [行對(duì)象,行對(duì)象,...,行對(duì)象] QuerySet類型
print(data_list)
# <QuerySet [<UserInfo: UserInfo object (3)>, <UserInfo: UserInfo object (4)>]>
for obj in data_list:
print(obj.name,obj.password,obj.age)
# 圈圈 123456 20
# 圈圈1 123456 11
更新數(shù)據(jù)
# 更新 id 為 1 的記錄的 name 和 age 字段
UserInfo.objects.filter(id=1).update(name='new_name', age=30)
Django的ORM會(huì)將我們的Python代碼翻譯成對(duì)應(yīng)的SQL語句,并執(zhí)行這些SQL語句以實(shí)現(xiàn)數(shù)據(jù)庫操作。這種方式簡(jiǎn)化了數(shù)據(jù)庫操作的復(fù)雜性,同時(shí)也提高了代碼的可讀性和可維護(hù)性。
5.遷移數(shù)據(jù)庫
使用Django的管理命令manage.py來執(zhí)行數(shù)據(jù)庫遷移操作,將模型映射到實(shí)際的數(shù)據(jù)庫表。在命令行中執(zhí)行以下命令:
python manage.py makemigrations # 生成數(shù)據(jù)庫遷移文件
python manage.py migrate # 應(yīng)用數(shù)據(jù)庫遷移
Django 就會(huì)根據(jù)這個(gè)模型創(chuàng)建相應(yīng)的 MySQL 表。假設(shè)你的應(yīng)用名為 application01,模型名為userinfo,那么在 MySQL 數(shù)據(jù)庫中就會(huì)生成一個(gè)名為 application01_userinfo的表
報(bào)錯(cuò)解決
報(bào)錯(cuò):django.db.utils.NotSupportedError: MySQL 8 or later is required (found 5.7.26)
原因:django與mysql版本不兼容
解決方式:
1.升級(jí)mysql版本(SELECT VERSION() 我的版本是5.5.40),有點(diǎn)麻煩不想升級(jí)
2.降低django版本(需要先搜一下版本兼容情況)文章來源:http://www.zghlxwxcb.cn/news/detail-765002.html
pip uninstall django
pip install django==2.0 -i https://pypi.tuna.tsinghua.edu.cn/simple文章來源地址http://www.zghlxwxcb.cn/news/detail-765002.html
到了這里,關(guān)于【python】Django——連接mysql數(shù)據(jù)庫的文章就介紹完了。如果您還想了解更多內(nèi)容,請(qǐng)?jiān)谟疑辖撬阉鱐OY模板網(wǎng)以前的文章或繼續(xù)瀏覽下面的相關(guān)文章,希望大家以后多多支持TOY模板網(wǎng)!