列表&字典的拓展应用
1、使用普通的逻辑语句(面向过程)
menu = '''
请输入您的操作:
1. 查询所有电影,请按1;
2. 添加一个电影,请按2;
3. 根据指定序号删除一个电影,请按3;
4. 根据电影名删除一个电影,请按4;
5. 退出系统,请按其它键。
'''
movies = [
{"name": "蚁人1:黄蜂女现身", "category": "科幻", "date": "2018"},
{"name": "蚁人2:黄蜂女现身", "category": "科幻", "date": "2018"},
{"name": "蚁人3:黄蜂女现身", "category": "科幻", "date": "2018"}
]
while True:
c=input(menu)
if c=="1":
print("序号\t\t\t电影名称\t\t\t类别\t\t\t年代")
for i,movie in enumerate(movies):
# print("{0}\t\t\t{1}\t\t\t{2}\t\t\t{3}".format(i + 1, movie['name'], movie['category'], movie['date']))
print("{0}\t{1}\t\t{2}\t\t\t{3}".format(i+1,movie['name'],movie['category'],movie['date']))
elif c=="2":
name = input("请输入电影名称:")
category=input("请输入电影类别:")
date=input("请输入年代:")
movie={'name':name,'category':category,'date':date}
movies.append(movie)
elif c=="3":
print("序号\t\t\t电影名称\t\t\t类别\t\t\t年代")
for i, movie in enumerate(movies):
print("{0}\t{1}\t\t{2}\t\t\t{3}".format(i + 1, movie['name'], movie['category'], movie['date']))
number=int(input("请删除指定的序号:"))
movies.pop(number-1)
print("序号\t\t\t电影名称\t\t\t类别\t\t\t年代")
for i,movie in enumerate(movies):
# print("{0}\t\t\t{1}\t\t\t{2}\t\t\t{3}".format(i + 1, movie['name'], movie['category'], movie['date']))
print("{0}\t{1}\t\t{2}\t\t\t{3}".format(i+1,movie['name'],movie['category'],movie['date']))
elif c=="4":
name=input("请输入要删除的电影名:")
for movie in movies:
# print(movie)
if name in movie['name']:
movies.remove(movie)
print("序号\t\t\t电影名称\t\t\t类别\t\t\t年代")
for i, movie in enumerate(movies):
print("{0}\t{1}\t\t{2}\t\t\t{3}".format(i + 1, movie['name'], movie['category'], movie['date']))
#
2、使用函数(函数封装)
# 查询方法
def select():
#使用字典保存每条电影对象,将电影名称 电影类型和电影年代作为键,然后使用列表保存每个装载电影对象的字典
print("电影名称\t电影类型\t年代")
#使用for循环遍历列表,得到每个字典对象,也就是每部电影信息(可以加上序号
for i,movie in enumerate(movies):
#然后通过键获取字典中每个属性的值
print("{0}\t{1}\t{2}\t{3}".format(i+1,movie['name'],movie['category'],movie['date']))
# select()
# 添加方法
def add():
global movies
name=input("请添加电影名称:")
category=input("请添加电影类型:")
date=input("请添加年代:")
movie={'name':name,'category':category,'date':date}
movies.append(movie)
select()
# add()
#删除方法(序号)
def count_del():
select()
numbers=int(input("请输入需要删除的序号:"))
movies.pop(numbers-1)
print("当前电影有:")
select()
# count_del()
#删除电影(电影名)
def del_movie():
select()
name=input("请输入需要删除的电影名:")
i=0
while i <= len(movies)-1:
if name in movies[i]['name']:
movies.remove(movies[i])
i=i+1
# for movie in movies:
# if name in movie['name']:
# movies.remove(movie)
select()
# del_movie()
movies = [{'name': '蜘蛛侠', 'category': '科幻', 'date': '1990'},
{'name': '猎魔人', 'category': '科幻', 'date': '2000'},
{'name': '变形金刚', 'category': '科幻', 'date': '2010'}
]
menu = '''
请输入您的操作:
1. 查询所有电影,请按1;
2. 添加一个电影,请按2;
3. 根据指定序号删除一个电影,请按3;
4. 根据电影名删除一个电影,请按4;
5. 退出系统,请按其它键。
'''
while True:
c=input(menu)
if c=="1":
select()
elif c=="2":
add()
elif c=="3":
count_del()
elif c=="4":
del_movie()
else:
break
3、使用类(面向对象)
NAME | CATEGORY | DATE |
---|---|---|
蜘蛛侠 | 科幻 | 1990 |
猎魔人 | 科幻 | 2000 |
变形金刚 | 科幻 | 2010 |
# 这里采用ORM模型也就是(定义类):
# 表---类
# 对象--数据行
# 属性--字段
# 对数据进行增删改查--函数
movies=[]
class Movies: #创建movies表
def __init__(self,name,category,date): #定义行字段,也就是表头属性
self.name=name
self.category=category
self.date=date
#设置方法
#1.查询方法
def select(self):
for i,movie in enumerate(movies):
print("序号\t\t\t电影名称\t\t\t电影类型\t\t\t年代")
print("{0}\t\t\t{1}\t\t\t{2}\t\t\t{3}".format(i+1,movie['name'],movie['category'],movie['date']))
#2.添加方法
def add(self):
movie={'name':self.name,'category':self.category,'date':self.date}
movies.append(movie)
#3.删除方法(序号)
def count_del(self,number):
self.number=number
movies.pop(number-1)
#4.删除方法(名称)
def movie_del(self):
i=1
while i<=len(movies)-1:
if movie in movies[i][self.name]:
movies.remove(movies[])
M=Movies
M1=Movies('蜘蛛侠','科幻','1990') #定义字段
M1.add() #插入记录
M1.select() #查询记录
M.del_count() #通过序号删除记录
M.del_movie() #通过地域名称删除记录
M2=Movies('猎魔人','科幻','2000')
M2.add()
M3=Movies('变形金刚','科幻','2010')
M3.add()
4、使用pymysql将列表信息保存至mysql数据库
import pymysql
#创建数据库连接、游标对象
class mysql_init(object):
def __init__(self, conn):
self.conn = None
# connect to mysql
def connect(self):
self.conn = pymysql.connect(
host="localhost",
port=3306,
user="root",
passwd="root",
db="test",
charset="utf8"
)
def cursor(self):
try:
return self.conn.cursor()
except (AttributeError, pymysql.OperationalError):
self.connect()
return self.conn.cursor()
def commit(self):
return self.conn.commit()
def close(self):
return self.conn.close()
def process():
dbconn.connect() #连接数据库对象
conn = dbconn.cursor() #创建游标对象
# DropTable(conn) #删除操作函数
# CreateTable(conn) #创建操作
InsertDatas(conn) #插入操作
# QueryData(conn) #查询操作
dbconn.commit() #提交并保存至数据库
dbconn.close() #关闭数据库连接
#插入方法
def InsertDatas(conn):
conn=dbconn.cursor()
# insert_sql = "insert into user_key values(%s)"
insert_sql = "INSERT INTO movie VALUES(%s,%s,%s)"
movies = [("大话西游","神话","1990-1-1")]
conn.executemany(insert_sql, movies)
#查询方法1
def query(sql, conn):
'''查询sql'''
# conn=dbconn.cursor()
conn.execute(sql)
rows = conn.fetchall() #查询表中的所有数据,相当于select * from table_name
return rows
#查询方法2
def QueryData(conn):
sql = "select * from user_key"
rows = query(sql, conn)
printResult(rows)
#删除方法1
def DropTable(conn):
# conn=dbconn.cursor()
conn.execute("DROP TABLE IF EXISTS `user_key`")
#删除方法2
def DeleteData(conn):
del_sql = "delete from user_key where id=2"
conn.execute(del_sql)
#创建方法
def CreateTable(conn):
# conn=dbconn.cursor()
sql_create = ''' CREATE TABLE `movie` (`name` varchar(50) NOT NULL,
`category` varchar(50) NOT NULL,
`date` date NOT NULL
)'''
conn.execute(sql_create)
def printResult(rows):
if rows is None:
print("rows None")
for row in rows:
print(row)
if __name__ == "__main__":
dbconn = mysql_init(None)
process() #调用相应的函数方法
5、使用Django理解列表&字典
Django使用流程见其他文章
5.1连接数据库
#settings.py文件
DATABASES = {
'default': {
'ENGINE': 'django.db.backends.mysql',
'NAME': 'demo',
'USER':'root',
'PASSWORD':'root'
}
}
5.2.定义Movies类(也就是列名、字典键)
from django.db import models
class Movies(models.Model):
name=models.CharField(max_length=64)
category=models.CharField(max_length=64)
date=models.CharField(max_length=64)
class Meta:
db_table="t_movies"
5.3创建表
makemigrations detail
migrate detail
5.4创建函数方法(也就是进行增删改查操作)
from django.shortcuts import render
from detail.models import Movies
def add(request):
if request.method=="GET":
return render(request, 'addmovies.html')
elif request.method=="POST":
movies=Movies()
movies.name=request.POST.get("name")
movies.category=request.POST.get("category")
movies.date=request.POST.get("date")
movies.save()
# return select(request)
return redirect(to= reverse('movielist')) #重定向方式
def select(request):
movies=Movies.objects.all() #字典
return render(request,'movielist.html',context={'movies':movies})
5.5设置路由(调用函数至网页文件)
from django.contrib import admin
from django.conf.urls import url
from detail import views
urlpatterns = [
url('admin/', admin.site.urls),
url('addmovies/',views.add),
url('movielist/',views.select,name='movielist') #重定向方式
#url('movielist/',views.select)
]
5.6网页文件
添加记录的页面
<!DOCTYPE html>
<html lang="en" xmlns="http://www.w3.org/1999/html">
<head>
<meta charset="UTF-8">
<title>Title</title>
</head>
<body>
<form action="http://127.0.0.1:8000/addmovies/" method="POST">
请输入电影名称:<input type="text" name="name"><br>
请输入电影类型:<input type="text" name="category"><br>
请输入时间:<input type="text" name="date"><br>
<input type="submit" value="提交">
</form>
</body>
</html>
查询记录的页面
<!DOCTYPE html>
<html lang="en">
<head>
<meta charset="UTF-8">
<title>movie list</title>
</head>
<body>
<table border="1" cellspacing="0">
<tr>
<th>name</th>
<th>category</th>
<th>date</th>
</tr>
{% for movie in movies %}
<tr>
<td>{{ movie.name }}</td>
<td>{{ movie.category }}</td>
<td>{{ movie.date }}</td>
</tr>
{% endfor %}
</table>
</body>
</html>
网友评论