列表&字典的拓展应用

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、使用类

电影名称 电影类型 电影年代
蜘蛛侠 科幻 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']))

    def add(self):
        movie={'name':self.name,'category':self.category,'date':self.date}
        movies.append(movie)

    def count_del(self,number):
        self.number=number
        movies.pop(number-1)
    def movie_del(self):
        i=1
        while i<=len(movies)-1:
            if i in movies[i][self.name]:
                movies.remove(movies[i])


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、使用python将列表信息保存至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使用流程见其他文章

1)连接数据库

#settings.py文件
DATABASES = {
    'default': {
        'ENGINE': 'django.db.backends.mysql',
        'NAME': 'demo',
        'USER':'root',
        'PASSWORD':'root'
    }
}

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"

3)创建表

makemigrations detail
migrate detail

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)设置路由(调用函数至网页文件)

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)
]

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>

7)查看效果

添加页面

提交后跳转到电影列表页面

查看数据库