结合sqlite3的学生信息成绩管理系统(六):导入数据文件import_data.py

一、系列文章链接

(一):程序介绍和流程图
(二):主要文件main.py
(三):基础文件basics.py
(四):管理学生信息manage.py
(五):查询学生信息query.py
(六):导入数据文件import_data.py
(七):导出数据文件export_data.py

二、实现效果

(1)导入全部信息

表格中的数据

先导入数据,表格中的数据如下:
学生表
课程表
选课表

简单模仿了SQL Server的导入

导入全部信息,系统会遍历整个xls文件,左边的是文件中的表头,是文件自带的,不管文件中的是什么,只要我们找出数据库中和它对应的即可联系上,如左边是“学号”“学生的学号”,只要导入填的是“Sno”或“学号”就能成功。
课程表和选课表也是相同原理,全部导入完毕提示成功。
在这里插入图片描述

(2)导入科目成绩

表格中的数据

可以在导入全部信息后再分开导入科目成绩。
创建了一个语文成绩表,选取了导入全部信息中导入的三个已经存在的学生,加上三个新学生(当初新学生用了舍友的学号和名字,打了马赛克)
在这里插入图片描述

导入时的注意事项

如果课程不存在,将会提示是否创建。
文件中一定要有学生的学号和姓名,不然新学生无法被创建,因为学生表的学号和姓名是一定不能为空的。如果只有学生的学号的话,那么得确保文件中的学生之前已经在数据库中。
在这里插入图片描述

三、import_data.py的函数简介

def main( cn):
“”“调用import_all,import_one函数”""
def main_show():
“”“主函数的显示”""

def insert_students( cn, sno, sname):
“”“对学生表进行插入,区别与ba里的,这里不用自动插入Sclass”""

(1)导入全部信息

  1. def import_all( cn):
    “”“导入全部信息,调用all_的函数”""
    #all的导入简单模仿了SQL Server的导入,需要自己输入导入到哪个表中,不然会出错

  2. def all_students( cn, table):
    “”“导入全部信息到 学生表 中”""

  3. def all_courses( cn, table):
    “”“导入全部信息到 课程表 中”""

  4. def all_reports( cn, table):
    “”“导入全部信息到 成绩表 中”""

(2)从header获取相应的信息,导入到三个表的操作

  1. def import_students( cn, table, header):
    “”“新的文件信息导入到 学生表 “””

  2. def import_courses( cn, table, header):
    “”“新的文件信息导入到 课程表 “””

  3. def import_reports( cn, table, header, nead):
    “”“新的文件信息导入到 成绩表 “””

    #nead是课程号,选课学年,选课学期是否需要输入
    #如果nead中没有相应的key值,就需要从header中获取
    #即不需要我们输入,在表格中本就存在

(3)导入单科成绩

  • def import_one( cn):
    “”“导入科目成绩”""

四、代码

import os
import xlrd
import basics as ba

def insert_students( cn, sno, sname):
    """对学生表进行插入,区别与ba里的,这里不用自动插入Sclass"""
    sql = '''insert into Students (Sno, Sname)
            values('%s','%s')
         ''' % ( sno, sname)
    cn.execute( sql)
    cn.commit()

#从header获取相应的信息,导入到三个表的操作
def import_students( cn, table, header):
    """新的文件信息导入到学生表"""
    stu = [ 'Sgender','Sbirth','Sclass','Snative']
    nrows = table.nrows #表的行数
    for i in range( 1, nrows):
        onerow = table.row_values(i)
        sno = onerow[ header['Sno']]
        sno = str(int(sno))
        sname = onerow[header['Sname']]

        sql = "SELECT DISTINCT Sname FROM Students " \
              "WHERE Sno = '%s'" % sno
        cursor = cn.execute( sql)
        information = 0
        for row in cursor:
            information = row[0]
        if information != 0:
            if information != onerow[header['Sname']]:
                print("数据库中的已经存在这个学号,"
                      "对应的姓名为'%s',"
                      "而导入文件中的姓名为'%s'" %
                      (information, onerow[header['Sname']]))
                confirm = input("信息冲突,是否覆盖?"
                                "(包括学生表和成绩表)(Y/N)")
                if confirm == 'y' or confirm == 'Y':
                    ba.del_students( cn, sno)
                    insert_students( cn, sno, sname)
                else:
                    print("取消覆盖,这行略过")
                    continue
        else:
            insert_students( cn, sno, sname)

        for key, value in
  • 1
    点赞
  • 6
    收藏
    觉得还不错? 一键收藏
  • 1
    评论
好的,下面是一个简单的信息管理系统的代码实现,使用的是Python的Flask框架和SQLite3数据库。这个信息管理系统可以添加、删除、修改和查询用户信息,包括姓名、年龄和性别。 1. 创建数据库和表格 首先需要创建一个SQLite3数据库,并创建一个名为“users”的表格,用来存储用户信息。表格包括id、name、age和gender四个字段。 ```sql CREATE TABLE users ( id INTEGER PRIMARY KEY AUTOINCREMENT, name TEXT NOT NULL, age INTEGER NOT NULL, gender TEXT NOT NULL ); ``` 2. 安装依赖库 需要安装Flask和SQLite3库,可以使用pip命令进行安装。 ```python pip install flask pip install sqlite3 ``` 3. 编写Flask应用程序 ```python from flask import Flask, render_template, request, redirect, url_for, flash import sqlite3 app = Flask(__name__) app.secret_key = 'secret_key' # 连接数据库 def get_db(): conn = sqlite3.connect('users.db') conn.row_factory = sqlite3.Row return conn # 关闭数据库 def close_db(e=None): db = get_db() db.close() # 创建表格 def init_db(): with app.app_context(): db = get_db() with app.open_resource('schema.sql', mode='r') as f: db.cursor().executescript(f.read()) db.commit() # 插入数据 def insert_data(name, age, gender): db = get_db() db.execute('INSERT INTO users (name, age, gender) VALUES (?, ?, ?)', (name, age, gender)) db.commit() # 查询数据 def select_data(): db = get_db() users = db.execute('SELECT * FROM users').fetchall() return users # 更新数据 def update_data(id, name, age, gender): db = get_db() db.execute('UPDATE users SET name = ?, age = ?, gender = ? WHERE id = ?', (name, age, gender, id)) db.commit() # 删除数据 def delete_data(id): db = get_db() db.execute('DELETE FROM users WHERE id = ?', (id,)) db.commit() # 显示用户信息列表 @app.route('/') def show_users(): users = select_data() return render_template('show_users.html', users=users) # 添加用户信息 @app.route('/add_user', methods=['GET', 'POST']) def add_user(): if request.method == 'POST': name = request.form['name'] age = request.form['age'] gender = request.form['gender'] if not name: flash('姓名不能为空!') elif not age: flash('年龄不能为空!') elif not gender: flash('性别不能为空!') else: insert_data(name, age, gender) return redirect(url_for('show_users')) return render_template('add_user.html') # 编辑用户信息 @app.route('/edit_user/<int:id>', methods=['GET', 'POST']) def edit_user(id): user = get_db().execute('SELECT * FROM users WHERE id = ?', (id,)).fetchone() if request.method == 'POST': name = request.form['name'] age = request.form['age'] gender = request.form['gender'] if not name: flash('姓名不能为空!') elif not age: flash('年龄不能为空!') elif not gender: flash('性别不能为空!') else: update_data(id, name, age, gender) return redirect(url_for('show_users')) return render_template('edit_user.html', user=user) # 删除用户信息 @app.route('/delete_user/<int:id>') def delete_user(id): delete_data(id) return redirect(url_for('show_users')) if __name__ == '__main__': app.run(debug=True) ``` 4. 创建HTML模板 创建三个HTML模板,分别用于显示用户信息列表、添加用户信息和编辑用户信息。这里只显示部分代码。 show_users.html ```html <table> <thead> <tr> <th>ID</th> <th>姓名</th> <th>年龄</th> <th>性别</th> <th>操作</th> </tr> </thead> <tbody> {% for user in users %} <tr> <td>{{ user['id'] }}</td> <td>{{ user['name'] }}</td> <td>{{ user['age'] }}</td> <td>{{ user['gender'] }}</td> <td> <a href="{{ url_for('edit_user', id=user['id']) }}">编辑</a> <a href="{{ url_for('delete_user', id=user['id']) }}" onclick="return confirm('确认删除?')">删除</a> </td> </tr> {% endfor %} </tbody> </table> ``` add_user.html ```html <form method="post"> <div> <label for="name">姓名:</label> <input type="text" id="name" name="name"> </div> <div> <label for="age">年龄:</label> <input type="text" id="age" name="age"> </div> <div> <label for="gender">性别:</label> <input type="text" id="gender" name="gender"> </div> <div> <input type="submit" value="添加"> </div> </form> ``` edit_user.html ```html <form method="post"> <div> <label for="name">姓名:</label> <input type="text" id="name" name="name" value="{{ user['name'] }}"> </div> <div> <label for="age">年龄:</label> <input type="text" id="age" name="age" value="{{ user['age'] }}"> </div> <div> <label for="gender">性别:</label> <input type="text" id="gender" name="gender" value="{{ user['gender'] }}"> </div> <div> <input type="submit" value="保存"> </div> </form> ``` 5. 运行应用程序 在终端中运行以下命令启动应用程序: ```python python app.py ``` 然后在浏览器中访问http://localhost:5000/即可看到信息管理系统的界面。可以添加、删除、修改和查询用户信息。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值