這期內(nèi)容當中小編將會給大家?guī)碛嘘P(guān)如何在django中使用mysql,文章內(nèi)容豐富且以專業(yè)的角度為大家分析和敘述,閱讀完這篇文章希望大家可以有所收獲。
創(chuàng)新互聯(lián)建站是專業(yè)的化德網(wǎng)站建設(shè)公司,化德接單;提供網(wǎng)站建設(shè)、網(wǎng)站設(shè)計,網(wǎng)頁設(shè)計,網(wǎng)站設(shè)計,建網(wǎng)站,PHP網(wǎng)站建設(shè)等專業(yè)做網(wǎng)站服務(wù);采用PHP框架,可快速的進行化德網(wǎng)站開發(fā)網(wǎng)頁制作和功能擴展;專業(yè)做搜索引擎喜愛的網(wǎng)站,專業(yè)的做網(wǎng)站團隊,希望更多企業(yè)前來合作!Django中的mysql配置
# Database # https://docs.djangoproject.com/en/2.0/ref/settings/#databases # 數(shù)據(jù)庫配置 默認的數(shù)據(jù)庫為sqlite # DATABASES = { # 'default': { # 'ENGINE': 'django.db.backends.sqlite3', # 'NAME': os.path.join(BASE_DIR, 'db.sqlite3'), # } # } DATABASES = { 'default': { 'ENGINE': 'django.db.backends.mysql', # 數(shù)據(jù)庫引擎 'NAME': 'django_mysql', # 數(shù)據(jù)庫名 'USER': 'root', # 賬號 'PASSWORD': 'root', # 密碼 'HOST': '127.0.0.1', # HOST 'POST': 3306, # 端口 } }
字段名稱代碼中都添加了相應(yīng)說明,ENGINE為MYSQL數(shù)據(jù)庫引擎,這個當然不會憑空出現(xiàn),需要我們?nèi)グ惭b
安裝pymysql
pip3 install pymysql
項目中配置
在最開始的項目包下的 init .py中進行如下配置
""" setting中的配置默認為sqlite3數(shù)據(jù)庫 當需要修改成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文件中 創(chuàng)建Student(學生信息)和StudentUnion(社團信息)
models.py:數(shù)據(jù)模塊,用于數(shù)據(jù)庫設(shè)計
""" 創(chuàng)建學生信息表模型 """ from django.db import models """ 該類是用來生成數(shù)據(jù)庫的 必須要繼承models.Model """ class Student(models.Model): """ 創(chuàng)建如下幾個表的字段 """ # 學號 primary_key=True: 該字段為主鍵 studentNum = models.CharField('學號', primary_key=True, max_length=15) # 姓名 字符串 大長度20 name = models.CharField('姓名', max_length=20) # 年齡 整數(shù) null=False, 表示該字段不能為空 age = models.IntegerField('年齡', null=False) # 性別 布爾類型 默認True: 男生 False:女生 sex = models.BooleanField('性別', default=True) # 手機 unique=True 該字段唯一 mobile = models.CharField('手機', unique=True, max_length=15) # 創(chuàng)建時間 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): # 自增主鍵, 這里不能設(shè)置default屬性,負責執(zhí)行save的時候就不會新增而是修改元素 id = models.IntegerField(primary_key=True) # 社團名稱 unionName = models.CharField('社團名稱', max_length=20) # 社團人數(shù) unionNum = models.IntegerField('人數(shù)', default=0) # 社團負責人 關(guān)聯(lián)Student的主鍵 即studentNum學號 一對一的關(guān)系,on__delete 屬性在django2.0之后為必填屬性后面會介紹 unionRoot = models.OneToOneField(Student, on_delete=None) class Meta: db_table = 'student_union' """ OneToOneField: 一對一 ForeignKey: 一對多 ManyToManyField: 多對多(沒有ondelete 屬性) """
在利用models.py文件生成數(shù)據(jù)庫表之前,我們需要手動的先創(chuàng)建數(shù)據(jù)庫:
mysql> create database django_mysql; Query OK, 1 row affected (0.01 sec)
創(chuàng)建完django_msql庫之后,我們在終端執(zhí)行如下命令,他的作用是將models文件生成一個遷移文件
python3 manage.py makemigrations
遷移文件生成完畢,執(zhí)行
python3 manage.py migrate
會將遷移文件的內(nèi)容作用到數(shù)據(jù)庫中,生成表或者修改字段屬性
控制臺輸出如下,則表示執(zhí)行成功
(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數(shù)據(jù)庫,其中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)
表結(jié)構(gòu)
desc查看表結(jié)構(gòu)
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文件創(chuàng)建數(shù)據(jù)庫表的功能已經(jīng)完畢。接下來用代碼的方式演示一下Django如何進行增刪改查
增加數(shù)據(jù)
為了提供一些測試數(shù)據(jù),這里用for循環(huán)批量的加了幾條簡單的數(shù)據(jù)。
from app_demo.models import Student import random """ 插入測試數(shù)據(jù) """ def insert(request): # 隨機整數(shù) 作為學號 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) # 插入數(shù)據(jù) student.save() return HttpResponse('數(shù)據(jù)插入完畢')
urls.py 文件中 urlpatterns中配置
url(r'^insert/', views.insert)
瀏覽器中訪問http://localhost:8000/insert/ 瀏覽器顯示‘數(shù)據(jù)插入完畢'
查詢數(shù)據(jù)庫,發(fā)現(xiàn)有5天數(shù)據(jù),也就是插入成功
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)
查詢數(shù)據(jù)
""" 查詢 """ def find(request): #sql = 'select * from student' # django 也可以執(zhí)行原生的sql語句 #result = Student.objects.raw(sql) # 查詢name = tom1的數(shù)據(jù) result = Student.objects.filter(name='tom1') """ result為<class 'django.db.models.query.QuerySet'>的對象 需要進行數(shù)據(jù)處理 """ 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/
修改數(shù)據(jù)
""" 修改 """ def modify(request, studentNum): # 通過學號獲取student對象 student = Student.objects.get(studentNum=studentNum) # 設(shè)置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
再次查詢mysql數(shù)據(jù)庫,發(fā)現(xiàn)name已經(jīng)被更新成了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)
刪除數(shù)據(jù)
""" 刪除 """ def delete(request, studentNum): student = Student.objects.get(studentNum=studentNum) student.delete() return HttpResponse('刪除成功.')
settings.py中urlpatterns的配置如下
url(r'^delete/(?P<studentNum>.+)', views.delete)
.+ 表示匹配多個字符(不包括換行等字符)
瀏覽器請求該視圖
查詢數(shù)據(jù)庫,發(fā)現(xiàn)該數(shù)據(jù)已經(jīng)被刪除
mysql> select * from student where studentNum='847849420'; Empty set (0.01 sec)
上述就是小編為大家分享的如何在django中使用mysql了,如果剛好有類似的疑惑,不妨參照上述分析進行理解。如果想知道更多相關(guān)知識,歡迎關(guān)注創(chuàng)新互聯(lián)行業(yè)資訊頻道。
本文題目:如何在django中使用mysql-創(chuàng)新互聯(lián)
路徑分享:http://aaarwkj.com/article46/ccoceg.html
成都網(wǎng)站建設(shè)公司_創(chuàng)新互聯(lián),為您提供網(wǎng)站建設(shè)、網(wǎng)站營銷、自適應(yīng)網(wǎng)站、面包屑導航、手機網(wǎng)站建設(shè)、網(wǎng)頁設(shè)計公司
聲明:本網(wǎng)站發(fā)布的內(nèi)容(圖片、視頻和文字)以用戶投稿、用戶轉(zhuǎn)載內(nèi)容為主,如果涉及侵權(quán)請盡快告知,我們將會在第一時間刪除。文章觀點不代表本網(wǎng)站立場,如需處理請聯(lián)系客服。電話:028-86922220;郵箱:631063699@qq.com。內(nèi)容未經(jīng)允許不得轉(zhuǎn)載,或轉(zhuǎn)載時需注明來源: 創(chuàng)新互聯(lián)
猜你還喜歡下面的內(nèi)容