python產品發布會_【Mac系統 + Python + Django】之開發一個發布會系統【Django模型(三)】...

上一部分給大家介紹Django的視圖。

接下來繼續來了解Django框架,來看第三部分,此部分是對數據庫的操作。

目錄:

一、設計系統表            返回目錄

首先打開sign/models.py,通過模型完成標的創建:

from django.db importmodels#Create your models here.

#發布會表

classEvent(models.Model):

name= models.CharField(max_length=100) #發布會標題

limit = models.IntegerField() #參加人數

status = models.BooleanField() #狀態

address = models.CharField(max_length=200) #地址

start_time = models.DateTimeField("event time") #發布會時間

create_time = models.DateTimeField(auto_now=True) #創建時間(自動獲取當前時間)

def __str__(self):returnself.name#嘉賓表

classGuest(models.Model):

event= models.ForeignKey(Event) #關聯發布會id

realname = models.CharField(max_length=64) #姓名

phone = models.CharField(max_length=16) #手機號

email = models.EmailField() #郵箱

sign = models.BooleanField() #簽到狀態

create_time = models.DateTimeField(auto_now=True) #創建時間(自動獲取當前時間)

def __str__(self):

return self.realname

classMeta: unique_together= ("event","phone")

模型創建好后,進行數據遷移:

打開終端執行:

test:guest zhan$python manage.py makemigrations sign

Migrationsfor'sign':

sign/migrations/0001_initial.py:-Create model Event-Create model Guest

test:guest zhan$python manage.py migrate

Operations to perform:

Apply all migrations: admin, auth, contenttypes, sessions, sign

Running migrations:

Applying sign.0001_initial... OK

sign/migrations/下會生成0001_initial.py文件:

二、admin后臺管理          ?返回目錄

首先,在sign/admin.py文件中寫入:

from django.contrib importadminfrom sign.models importEvent,Guest#Register your models here.

#這些代碼通知Admin管理工具為這些模塊提供界面

admin.site.register(Event)

admin.site.register(Guest)

如下圖:

登錄Admin后臺系統:http://127.0.0.1:8000/admin/

添加發布會:

列表顯示一列發布會名字,是因為自己定義了__str__():里面的name

如果想顯示全部的列表字段,則在?sign/admin.py中繼續添加:

from django.contrib importadminfrom sign.models importEvent,Guest#Register your models here.

# 添加兩個方法,把字段值放在list_display中

classEventAdmin(admin.ModelAdmin):

list_display= ["id","name","limit","status","address","start_time","create_time"]classGuestAdmin(admin.ModelAdmin):

list_display= ["event","realname","phone","email","sign","create_time"]#這些代碼通知Admin管理工具為這些模塊提供界面

admin.site.register(Event,EventAdmin)  # 并添加class進來

admin.site.register(Guest,GuestAdmin)

還可以添加【搜索欄、過濾器】,在sign/admin.py中繼續添加:

from django.contrib importadminfrom sign.models importEvent,Guest#Register your models here.

classEventAdmin(admin.ModelAdmin):

list_display= ["id","name","limit","status","address","start_time","create_time"]

search_fields= ["name"] #搜索欄

list_filter = ["status"] #過濾器

classGuestAdmin(admin.ModelAdmin):

list_display= ["event","realname","phone","email","sign","create_time"]

search_fields= ["realname","phone"] #搜索欄

list_filter = ["sign"] #過濾器

#這些代碼通知Admin管理工具為這些模塊提供界面

admin.site.register(Event,EventAdmin)

admin.site.register(Guest,GuestAdmin)

search_fields:用于創建搜索欄,可以設置匹配多個關鍵字。

list_filter:用于創建字段過濾器。

三、基本數據訪問(SQLite數據庫)    ?返回目錄

下面我們通過Django自帶的SQLite操作數據庫,如何通過數據庫進行操作呢,需要命令行運行manage.py的shell命令

python manage.py shell

1、插入語句

# 準備條件

>>>from sign.models import Event,Guest>>>from datetime import datetime>>>Event.objects.all()

]>

>>>Guest.objects.all()

]>

①第一種插入語句:創建和保存

insert_e1 = Event(id='2',

name='魅族發布會',

limit='1000',

status=True,

address='天津梅江會展',

start_time=datetime(2018,10,15,12,0,0))

insert_e1.save()

②第二種插入語句:直接創建

Event.objects.create(id='2',

name='魅族發布會',

limit='1000',

status=True,

address='天津梅江會展',

start_time=datetime(2018,10,15,12,0,0))

Guest.objects.create(realname='owen',

phone= '136',

email='136@qq.com',

sign=False,

event_id='2')

但是會提示警告信息:

1430: RuntimeWarning: DateTimeField Event.start_time received a naive datetime (2018-10-15 12:00:00) whiletime zone support is active.

RuntimeWarning)

UTC問題,可以忽略此問題,guest/settings.py中,設置USE_TZ = False。

2、查詢語句

(1)精確查詢

address作為查詢條件,查詢name

>>> e1 = Event.objects.get(address ='天津梅江會展')>>>e1.name

'魅族發布會'# 或者

>>> Event.objects.get(address = '天津梅江會展').name

'魅族發布會'

>>>

相對應的Guest表:

>>> g1 = Guest.objects.get(realname__contains='ow')>>>g1.event

>>>g1.event.name

'魅族發布會'>>>g1.event.address

'天津梅江會展'>>>

(2)模糊查詢

只想查詢關鍵字

filter()方法是從數據庫中取得匹配結果,返回的是列表;name與contains雙下劃線連接,contains類似于LIKE語句。

>>> Event.objects.filter(name__contains='發布會')

, ]>

>>>

(3)刪除數據

注:我寫的是模糊查詢刪除,最好是精確刪除。

>>> g1 = Guest.objects.get(realname__contains='ow')>>>g1.delete()

(1, {'sign.Guest': 1})>>>

#或者

>>> Guest.objects.get(realname__contains='ow').delete()

(1, {'sign.Guest': 1})>>>

(4)更新數據

>>> g1 = Guest.objects.get(realname__contains='ow')>>> g1.realname='owen02'>>>g1.save()>>>

#或者

Guest.objects.select_for_update().filter(realname__contains='ow').update(realname='owen')1

四、Django配置MySQL        ?返回目錄

雖然SQLite數據庫可以操作數據,但是不適用于大型項目,下面來介紹MySQL數據庫在Django中的操作。

1、安裝Mysql數據庫

2、MySQL數據庫基本操作

數據庫操作:

#進入mysql

mysql -u root -p

# 查看數據庫

show databases;

# 創建數據庫create database if not existsguest;

# 進入guest數據庫useguest;

# 查看數據庫的表

show tables;

# 創建表create table if not existssign_guest(

idintunsigned auto_increment,

realnamevarchar(100)not null,

phonevarchar(16) not null,

emailVARCHAR(20) UNIQUE, # UNIQUE:不可重復,只有null是可以重復sign varchar(5),

create_time date,primary key(id,phone)

)charset=utf8;

# 查看表屬性descsign_guest;

# 插入數據insert into sign_guest(realname,phone,email,sign,create_time)values('zc','16612345678','123@qq.com','1',now())

3、安裝pymysql

安裝命令:

pip install pymysql

在此忽略......

4、在Django中配置MySQL

修改guest/settings.py下的DATABASES

DATABASES ={'default': {'ENGINE': 'django.db.backends.mysql', #驅動

'HOST': '127.0.0.1', #主機地址

'PORT': '3306', #端口號

'NAME': 'guest', #數據庫

'USER': 'root', #登錄用戶名

'PASSWORD': '1234567', #登錄密碼

'OPTIONS': {'init_command': "SET sql_mode='STRICT_TRANS_TABLES'",

},

}

}

在guest項目中輸入命令:

test:guest zhan$ python manage.py migrate

但是報錯:

django.core.exceptions.ImproperlyConfigured: Error loading MySQLdb module: No module named 'MySQLdb'

原因為沒有MySQLdb驅動,解決辦法如下:

在.../guest/__init__.py中添加代碼:

importpymysql

pymysql.install_as_MySQLdb()

然后再執行命令:

python manage.py migrate

但是,會提示錯誤,如果沒有問題跳過此段落:

......

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 sessions.0001_initial...OK

Applying sign.0001_initial...Traceback (most recent call last):

...

...

...

pymysql.err.InternalError: (1050, "Table 'sign_guest' already exists")

原因為我在上面寫mysql基本數據庫操作時候,自己創建了sign_guest表,所以最好刪除guest數據庫,重新再執行一遍命令。

終端進入數據庫,具體操作不描述,上面基本操作介紹過。

#刪除數據庫

drop database guest;#創建數據庫

create database guest;

再執行命令:

python manage.py migrate

正確顯示如下:

Operations to perform:

Apply all migrations: admin, auth, contenttypes, sessions, sign

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 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 sessions.0001_initial... OK

Applying sign.0001_initial... OK

因為更換了數據庫,所以里面的Admin超級管理員賬號也需要重新創建。

然后再終端輸入命令:

python manage.py createsuperuser

Username (leave blank to use 'zhan'): admin

Email address: xxx@xxx.com

Password:

Password (again):

Superuser created successfully.

至此,Django的模型創建完畢,下一篇介紹Django模板

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

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

相關文章

java 保留字符串,如何在Java中保留字符串而不使用反轉功能

有以下幾種在Java中反轉字符串的方法:使用for循環使用While循環使用靜態方法使用For循環使用for循環在Java中反轉字符串的示例在下面的示例中, 我們使用了for循環來反轉字符串。 for循環執行直到條件i> 0變為false為止。import java.util.Scanner;class ReverseS…

python增刪改查csv文件_Python增刪改查文件

#!/usr/bin/env python# -*- coding:utf-8 -*-# author:Erik Chan# datetime:2018/12/27 9:29# software: PyCharmimport os# 獲取當前文件的父目錄文件夾DIR os.path.dirname(os.path.abspath(__file__))cwd os.getcwd() #獲取當前目錄即dir目錄下print(cwd)# 創建添加一個文…

php 模塊 遠程,ThinkPHP遠程調用模塊的操作方法 URL 參數格式

* 遠程調用模塊的操作方法 URL 參數格式 [項目://][分組/]模塊/操作* param string $url 調用地址* param string|array $vars 調用參數 支持字符串和數組* param string $layer 要調用的控制層名稱* return mixedfunction R($url,$varsarray(),$layer‘‘) {$info pathinfo($…

python3 csv 讀入數組_如何將CSV數據讀入NumPy中的記錄數組?

我建議read_csv函數的pandas圖書館:import pandas as pddfpd.read_csv(myfile.csv, sep,,headerNone)df.valuesarray([[ 1. , 2. , 3. ],[ 4. , 5.5, 6. ]])DataFrame是一種具有潛在不同類型列的二維標記數據結構.你可以把它想象成一個電子表格或SQL表.我也建議…

php用cdn打不開,開啟 CDN 后 wordpress 后臺打不開的解決辦法

現在很多站長把網站放到國外,使用 CDN 加速功能提高國內的訪問速度,前面提到過開啟騰訊云 CDN 后 wordpress 后臺顯示:連接被重置的解決辦法,而今天遇到的是另外一種情況,有時候會遇到開啟 CDN 后 wordpress 后臺打不開…

android 支付寶月賬單 統計圖_記賬其實很簡單,用微信、支付寶就夠了!

用微信、支付寶記賬,從起告別糊涂賬養成記賬的好習慣,能讓你對生活中的各種收支做到心中有數,從此告別糊涂賬。長期堅持,能幫助我們理性消費、科學理財。但或許是因為記賬的過程太枯燥,或許是因為沒找到合適的記賬方法…

mysql抖動可能的原因,12 | 為什么我的MySQL會“抖”一下?

你的 SQL 語句為什么變“慢”了平時執行很快的更新操作,其實就是在寫內存和日志,而 MySQL 偶爾“抖”一下的那個瞬間,可能就是在刷臟頁(flush)。當內存數據頁跟磁盤數據頁內容不一致的時候,我們稱這個內存頁為“臟頁”。內存數據寫…

怎樣快速畫出一個正方體_圖形與幾何---正方體

一.概念描述現代數學:正方體亦稱立方體。它是一種正多面體。即棱長相等的長方體,因此亦稱正六面體,如下圖。小學數學:2007年北京版教材第10冊的第3頁指出:長、寬、高都相等的長方體叫作正方體(也叫作立方體…

python argvparser_Python ArgumentParse的subparser用法說明

在寫一些很小的機器學習項目的時候,我們往往希望training, testing和inference能共用一個入口main,但是不同的功能使用不同的input參數.當然如果三個功能對應三個.py腳本問題也不大,但是畢竟覺得不太優雅.這個時候就需要考慮如何讓代碼更加簡單有條理.主要是最近在看parser有關…

python生成器函數(generator),python3學習筆記:生成器generator

簡單了解下生成器generator,主要是yield的返回值和send的傳參,記錄下。生成器的基本屬性generator 函數 yield簡單說,就是一個函數,里面用到了關鍵字yield,就成為了一個生成器生成器和函數的不同主要在于&#xff1a…

復旦微電子fpga數據手冊_專注FPGA圖像加速領域 深維科技跨入發展快車道

日前,在2019賽靈思開發者大會(美洲站)上,深維科技正式面向全球發布ThunderImage三款重磅圖像加速產品:全球最快的JPEG2JPEG縮略圖方案、超高性能的JPEG2WebP轉碼方案及世界級超高密度算力的JPEG2JPEG縮略圖方案。新產品一經發布立即“技驚”四…

oracle Blob保存方式,關于文件保存到Oracle中BLOB字段的方法及例子

關于文件保存到Oracle中BLOB字段的方法及例子-------------------------------------------public class FileOpClass{public static byte[] GetFileStream(string filepath){byte[] byteArray null;FileStream fs null;try{fs new FileStream(filepath, FileMode.Open);lon…

python 調c++生成的dll 中識別char *_基于tensorflow 實現端到端的OCR:二代身份證號識別...

最近在研究OCR識別相關的東西,最終目標是能識別身份證上的所有中文漢字數字,不過本文先設定一個小目標,先識別定長為18的身份證號,當然本文的思路也是可以復用來識別定長的驗證碼識別的。 本文實現思路主要來源于Xlvector的博客&a…

php友價商城手游,2019年T5友價商城網站程序-偽靜態規則

# Version 3.1.0.73RewriteEngine on#RewriteBase /RewriteRule vip(.*) /shop/view.php?str$1RewriteRule ^(.*)/search(.*).html /$1/index.php?str$2RewriteRule ^(.*)/goods([0-9]*).html /$1/goods.php?id$2RewriteRule ^(.*)/(.*)list(.*).html /$1/$2list.php?str$3…

oracle 的跨天查詢,考勤跨天如何統計 - Oracle開發 - ITPUB論壇-中國專業的IT技術社區...

本帖最后由 yaksha1 于 2020-9-11 17:29 編輯請問下,目前正在統計每個人每天考勤數據是否正常,上班打一次卡,下班打一次卡,算是正常。打卡情況大致分兩種,一種是正常白班,朝九晚五,一種是跨天&a…

php程序員學什么語言好就業_2019年初中畢業生學什么專業好?學什么專業好就業?...

前言:據了解,目前我國職業人才缺口較大,市場供需不平衡。許多學生往往還沒畢業,就已經與企業簽訂了就業協議。因此,有許多家長愿意把小孩子送到專業學校進行就讀。畢竟可以學的一門好專業,對學生將來的路是…

中print中加f_Python3中的格式化輸出

Python3字符串格式化輸出有兩種形式實現:a:字符串格式化表達式: ...%... % (values)b:字符串格式化方法調用:...{}....format(values) 或者 f...{xx}...1:字符串格式化的類型碼(typecode)(表1)2: 字符串格式化表達式格…

Json-ServerMockJs簡單快速生成測試數據

Json-Server&MockJs簡單快速生成測試數據 1、Json-Server 和 MockJs的安裝 npm install -g json-server //全局安裝2、創建目錄和初始話 例如:創建D:\ProjectOne文件夾 3、打開終端或者powershell進入ProjectOne文件夾 4、初始化項目 npm init5、安裝Mock…

oracle索引sys_nc,通過dba_ind_columns表查到索引所在列的名字為SYS_NC00133$

使用下面的腳本查看表上索引相關信息:selectind.uniqueness uniq,ind.owner||.||col.index_name indname,col.column_name colnamefromdba_ind_columns col,dba_indexes indwhereind.owner upper(&ixowner)andind.table_name upper(&tabname)andcol.index…

oracle nvl和coalesce,NVL與Coalesce之間的Oracle差異

慕碼人8056858COALESCE是更現代的功能,是ANSI-92標準的一部分。NVL在Oracle具體的,它在推出80的前存在任何標準。在兩個值的情況下,它們是同義詞。但是,它們的實現方式不同。NVL總是計算兩個參數,同時COALESCE通常在找…