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.mzph.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通常在找…