中文字幕av专区_日韩电影在线播放_精品国产精品久久一区免费式_av在线免费观看网站

溫馨提示×

溫馨提示×

您好,登錄后才能下訂單哦!

密碼登錄×
登錄注冊×
其他方式登錄
點擊 登錄注冊 即表示同意《億速云用戶服務條款》

如何在django中使用mysql

發布時間:2021-03-25 17:40:44 來源:億速云 閱讀:158 作者:Leah 欄目:開發技術

這期內容當中小編將會給大家帶來有關如何在django中使用mysql,文章內容豐富且以專業的角度為大家分析和敘述,閱讀完這篇文章希望大家可以有所收獲。

Django中的mysql配置

# Database
# https://docs.djangoproject.com/en/2.0/ref/settings/#databases

# 數據庫配置 默認的數據庫為sqlite
# DATABASES = {
#  'default': {
#   'ENGINE': 'django.db.backends.sqlite3',
#   'NAME': os.path.join(BASE_DIR, 'db.sqlite3'),
#  }
# }
DATABASES = {
 'default': {
  'ENGINE': 'django.db.backends.mysql', # 數據庫引擎
  'NAME': 'django_mysql', # 數據庫名
  'USER': 'root', # 賬號
  'PASSWORD': 'root', # 密碼
  'HOST': '127.0.0.1', # HOST
  'POST': 3306, # 端口

 }
}

字段名稱代碼中都添加了相應說明,ENGINE為MYSQL數據庫引擎,這個當然不會憑空出現,需要我們去安裝

安裝pymysql

pip3 install pymysql

項目中配置

在最開始的項目包下的 init .py中進行如下配置

"""
setting中的配置默認為sqlite3數據庫 當需要修改成MySql時
并且在setting.py的同級目錄的__init__.py 加入如下配置
否則會報錯: Error loading MySQLdb module.
"""
import pymysql
pymysql.install_as_MySQLdb()

如果mysql配置信息錯誤(用戶名、密碼、host等)控制臺會報如下異常

pymysql.err.OperationalError: (1045, "Access denied for user 'ROOT'@'localhost' (using password: YES)")

在app文件的models.py文件中 創建Student(學生信息)和StudentUnion(社團信息)

models.py:數據模塊,用于數據庫設計

"""
創建學生信息表模型
"""
from django.db import models

"""
 該類是用來生成數據庫的 必須要繼承models.Model
"""
class Student(models.Model):
 """
 創建如下幾個表的字段
 """
 # 學號 primary_key=True: 該字段為主鍵
 studentNum = models.CharField('學號', primary_key=True, max_length=15)
 # 姓名 字符串 最大長度20
 name = models.CharField('姓名', max_length=20)
 # 年齡 整數 null=False, 表示該字段不能為空
 age = models.IntegerField('年齡', null=False)
 # 性別 布爾類型 默認True: 男生 False:女生
 sex = models.BooleanField('性別', default=True)
 # 手機 unique=True 該字段唯一
 mobile = models.CharField('手機', unique=True, max_length=15)
 # 創建時間 auto_now_add:只有在新增的時候才會生效
 createTime = models.DateTimeField(auto_now_add=True)
 # 修改時間 auto_now: 添加和修改都會改變時間
 modifyTime = models.DateTimeField(auto_now=True)

 # 指定表名 不指定默認APP名字——類名(app_demo_Student)
 class Meta:
  db_table = 'student'


"""
學生社團信息表
"""
class studentUnion(models.Model):
 # 自增主鍵, 這里不能設置default屬性,負責執行save的時候就不會新增而是修改元素
 id = models.IntegerField(primary_key=True)
 # 社團名稱
 unionName = models.CharField('社團名稱', max_length=20)
 # 社團人數
 unionNum = models.IntegerField('人數', default=0)
 # 社團負責人 關聯Student的主鍵 即studentNum學號 一對一的關系,on__delete 屬性在django2.0之后為必填屬性后面會介紹
 unionRoot = models.OneToOneField(Student, on_delete=None)

 class Meta:
  db_table = 'student_union'


"""
OneToOneField: 一對一
ForeignKey: 一對多
ManyToManyField: 多對多(沒有ondelete 屬性)
"""

在利用models.py文件生成數據庫表之前,我們需要手動的先創建數據庫:

mysql> create database django_mysql;
Query OK, 1 row affected (0.01 sec)

創建完django_msql庫之后,我們在終端執行如下命令,他的作用是將models文件生成一個遷移文件

python3 manage.py makemigrations

如何在django中使用mysql

遷移文件生成完畢,執行

python3 manage.py migrate

會將遷移文件的內容作用到數據庫中,生成表或者修改字段屬性

控制臺輸出如下,則表示執行成功

(django_venv) xxxxxdeAir:djangoDemo xxxxx$ python3 manage.py migrate
Operations to perform:
Apply all migrations: admin, app_demo, auth, contenttypes, sessions
Running migrations:
Applying contenttypes.0001_initial... OK
Applying auth.0001_initial... OK
Applying admin.0001_initial... OK
Applying admin.0002_logentry_remove_auto_add... OK
Applying admin.0003_logentry_add_action_flag_choices... OK
Applying app_demo.0001_initial... OK
Applying contenttypes.0002_remove_content_type_name... OK
Applying auth.0002_alter_permission_name_max_length... OK
Applying auth.0003_alter_user_email_max_length... OK
Applying auth.0004_alter_user_username_opts... OK
Applying auth.0005_alter_user_last_login_null... OK
Applying auth.0006_require_contenttypes_0002... OK
Applying auth.0007_alter_validators_add_error_messages... OK
Applying auth.0008_alter_user_username_max_length... OK
Applying auth.0009_alter_user_last_name_max_length... OK
Applying sessions.0001_initial... OK

查看我們的django_mysql數據庫,其中student和student_union就是用models文件生成的表,其他的表是項目自動生成的,暫時可以先不用管

mysql> use django_mysql
Database changed

mysql> show tables;
+----------------------------+
| Tables_in_django_mysql  |
+----------------------------+
| auth_group     |
| auth_group_permissions  |
| auth_permission   |
| auth_user     |
| auth_user_groups   |
| auth_user_user_permissions |
| django_admin_log   |
| django_content_type  |
| django_migrations   |
| django_session    |
| student     |
| student_union    |
+----------------------------+
12 rows in set (0.00 sec)

表結構

desc查看表結構

mysql> desc student;
+------------+-------------+------+-----+---------+-------+
| Field  | Type  | Null | Key | Default | Extra |
+------------+-------------+------+-----+---------+-------+
| studentNum | varchar(15) | NO | PRI | NULL |  |
| name  | varchar(20) | NO |  | NULL |  |
| age  | int(11)  | NO |  | NULL |  |
| sex  | tinyint(1) | NO |  | NULL |  |
| mobile  | varchar(15) | NO | UNI | NULL |  |
| createTime | datetime(6) | NO |  | NULL |  |
| modifyTime | datetime(6) | NO |  | NULL |  |
+------------+-------------+------+-----+---------+-------+
7 rows in set (0.00 sec)
mysql> desc student_union;
+--------------+-------------+------+-----+---------+-------+
| Field  | Type  | Null | Key | Default | Extra |
+--------------+-------------+------+-----+---------+-------+
| id   | int(11)  | NO | PRI | NULL |  |
| unionName | varchar(20) | NO |  | NULL |  |
| unionNum  | int(11)  | NO |  | NULL |  |
| unionRoot_id | varchar(15) | NO | UNI | NULL |  |
+--------------+-------------+------+-----+---------+-------+
4 rows in set (0.00 sec)

至此Django利用models文件創建數據庫表的功能已經完畢。接下來用代碼的方式演示一下Django如何進行增刪改查

增加數據

為了提供一些測試數據,這里用for循環批量的加了幾條簡單的數據。

from app_demo.models import Student
import random
"""
插入測試數據
"""
def insert(request):
 # 隨機整數 作為學號
 for i in range(0, 5):
  studentNum = int(random.uniform(0, 1) * 10000000000)
  # 從models文件中獲取student對象
  student = Student()
  # 給對象賦值
  student.studentNum = studentNum
  student.name = 'tom' + str(i)
  student.age = 15
  student.sex = random.choice([True, False])
  student.mobile = int(random.uniform(0, 1) * 10000000000)
  # 插入數據
  student.save()

 return HttpResponse('數據插入完畢')

urls.py 文件中 urlpatterns中配置

url(r'^insert/', views.insert)

瀏覽器中訪問http://localhost:8000/insert/ 瀏覽器顯示‘數據插入完畢'

查詢數據庫,發現有5天數據,也就是插入成功

mysql> select * from student;
+------------+------+-----+-----+------------+----------------------------+----------------------------+
| studentNum | name | age | sex | mobile  | createTime     | modifyTime     |
+------------+------+-----+-----+------------+----------------------------+----------------------------+
| 1352687635 | tom2 | 15 | 1 | 941807449 | 2018-11-08 09:58:40.226856 | 2018-11-08 09:58:40.227002 |
| 5554311867 | tom0 | 15 | 0 | 1598619027 | 2018-11-08 09:58:40.203807 | 2018-11-08 09:58:40.203960 |
| 7302510986 | tom4 | 15 | 0 | 9602601619 | 2018-11-08 09:58:40.251479 | 2018-11-08 09:58:40.251682 |
| 847849420 | tom3 | 15 | 0 | 195276039 | 2018-11-08 09:58:40.238601 | 2018-11-08 09:58:40.238928 |
| 9962892430 | tom1 | 15 | 0 | 3265013828 | 2018-11-08 09:58:40.215488 | 2018-11-08 09:58:40.216106 |
+------------+------+-----+-----+------------+----------------------------+----------------------------+
5 rows in set (0.00 sec)

查詢數據

"""
查詢
"""
def find(request):
 #sql = 'select * from student'
 # django 也可以執行原生的sql語句
 #result = Student.objects.raw(sql)

 # 查詢name = tom1的數據
 result = Student.objects.filter(name='tom1')
 """
 result為<class 'django.db.models.query.QuerySet'>的對象
 需要進行數據處理
 """
 arr = []
 for i in result:
  content = {'學號': i.studentNum, '姓名': i.name, '性別': i.sex}
  arr.append(content)
 print(arr)
 print(type(arr))
 return HttpResponse(arr)

配置urls,瀏覽器訪問localhost:8000/find/

如何在django中使用mysql 

修改數據

"""
修改
"""
def modify(request, studentNum):
 # 通過學號獲取student對象
 student = Student.objects.get(studentNum=studentNum)
 # 設置student的name為jack
 student.name = 'jack'
 student.save()
 return HttpResponse('修改成功.')
setting文件中的配置如下

url(r'^modify/(?P<studentNum>\d+)', views.modify),

setting文件中的配置如下

url(r'^modify/(?P<studentNum>\d+)', views.modify),

修改學號847849420的name為jack

如何在django中使用mysql

再次查詢mysql數據庫,發現name已經被更新成了jack

mysql> select * from student where studentNum='847849420';
+------------+------+-----+-----+-----------+----------------------------+----------------------------+
| studentNum | name | age | sex | mobile | createTime     | modifyTime     |
+------------+------+-----+-----+-----------+----------------------------+----------------------------+
| 847849420 | jack | 15 | 0 | 195276039 | 2018-11-08 09:58:40.238601 | 2018-11-08 10:22:46.403147 |
+------------+------+-----+-----+-----------+----------------------------+----------------------------+
1 row in set (0.00 sec)

刪除數據

"""
刪除
"""
def delete(request, studentNum):
 student = Student.objects.get(studentNum=studentNum)
 student.delete()
 return HttpResponse('刪除成功.')

settings.py中urlpatterns的配置如下

url(r'^delete/(?P<studentNum>.+)', views.delete)

.+ 表示匹配多個字符(不包括換行等字符)

瀏覽器請求該視圖

如何在django中使用mysql

查詢數據庫,發現該數據已經被刪除

mysql> select * from student where studentNum='847849420';
Empty set (0.01 sec)

上述就是小編為大家分享的如何在django中使用mysql了,如果剛好有類似的疑惑,不妨參照上述分析進行理解。如果想知道更多相關知識,歡迎關注億速云行業資訊頻道。

向AI問一下細節

免責聲明:本站發布的內容(圖片、視頻和文字)以原創、轉載和分享為主,文章觀點不代表本網站立場,如果涉及侵權請聯系站長郵箱:is@yisu.com進行舉報,并提供相關證據,一經查實,將立刻刪除涉嫌侵權內容。

AI

石嘴山市| 获嘉县| 隆化县| 昌图县| 宁安市| 林西县| 香格里拉县| 邯郸县| 南开区| 桃江县| 昭苏县| 高邮市| 庆云县| 镇宁| 菏泽市| 江津市| 太原市| 武冈市| 谢通门县| 亳州市| 咸丰县| 永济市| 株洲县| 恩平市| 乐安县| 日照市| 响水县| 绍兴县| 广西| 合川市| 永安市| 正镶白旗| 亳州市| 定日县| 武宁县| 班戈县| 萝北县| 武宣县| 阿克苏市| 四会市| 论坛|