内容正文:
编写说明:2027版安徽省普通高校对口招生考试电子与信息大类(计算机类)专业《考纲百套卷》,依据《安徽省普通高校对口招生专业理论和技能测试考试纲要(2025年版)》编写。本专辑涵盖三个部分,第一部分为知识训练卷,第二部分为专题训练卷,第三部分为课程综合卷。本专辑共99份试卷,其中知识训练卷75份、专题训练卷17份、课程综合卷7份。
本试卷是第75卷,为知识训练卷,按《计算机编程基础—Python语言》中“数据库的使用”范围和要求编写。具体内容为:1.Python 数据库应用接口(B)。2.Sqlite3 模块(C)。3.数据表的创建(B)。4.数据表的操作(C)。
安徽省对口招生考试
电子与信息大类(计算机类)《考纲百套卷》
第75卷 计算机编程基础—Python语言——数据库的使用
(考试时间:45分钟 满分:100分)
一、填空题(共10题,每题2分,共20分)
1.Python内置的轻量级数据库模块是__________。
2.连接SQLite数据库使用__________函数,返回连接对象。
3.执行SQL语句需先创建__________对象,通过连接的__________方法获取。
4.插入/更新/删除数据后,必须调用__________方法才能将更改持久化到数据库。
5.查询结果后,使用__________方法获取所有行,返回__________类型。
6.创建表的SQL关键字是__________,插入数据的关键字是__________。
7.使用__________语法可防止SQL注入攻击,而非直接拼接字符串。
8.SQLite中整数类型的关键字是__________,文本类型是__________。
9.获取刚插入数据的自增主键ID,使用游标的__________属性。
10.查询条件WHERE age>18中,获取结果行数的SQL函数是__________。
二、单项选择题(共15题,每题2分,共30分)
11.cursor.execute(sql)返回( )
A.游标对象
B.结果列表
C.影响行数
D.布尔值
12.conn.commit()的作用( )
A.关闭连接
B.提交事务
C.回滚
D.执行SQL
13.防止SQL注入的正确做法( )
A.检查输入
B.参数化查询
C.过滤引号
D.限制长度
14.SQLite连接文件不存在时( )
A.报错
B.创建新文件
C.返回None
D.忽略
15.SELECT * FROM t 结果获取( )
A.execute直接返回
B.fetchall
C.fetch
D.get
16.INTEGER PRIMARY KEY 的作用( )
A.唯一标识+自增
B.只能放整数
C.必须手动赋值
D.只读
17.UPDATE t SET age=20 缺少WHERE( )
A.报错
B.更新所有行
C.不执行
D.更新一行
18.c.execute("SELECT * FROM t WHERE id=?", (1,))中(1,)( )
A.语法错误
B.单元素元组
C.列表
D.字典
19.conn.close()调用后( )
A.SQL不执行
B.连接释放
C.数据库删除
D.自动commit
20.CREATE TABLE IF NOT EXISTS作用( )
A.强制创建
B.表存在跳过
C.删除重建
D.报错
21.SQLite中AUTOINCREMENT关键字( )
A.必需
B.可选
C.不支持
D.仅主键
22.GROUP BY子句的作用( )
A.排序
B.分组聚合
C.过滤
D.连接
23.c.execute(sql)执行失败会( )
A.返回None
B.抛出异常
C.静默失败
D.自动重试
24.LIKE用于模糊查询,%表示( )
A.单字符
B.任意多个字符
C.转义
D.数字
25.conn=sqlite3.connect(":memory:")存储( )
A.临时文件
B.内存
C.磁盘文件
D.不存储
三、程序分析题(共3题,每题6分,共18分)
26.import sqlite3
conn=sqlite3.connect("test.db")
c=conn.______
c.______("CREATE TABLE IF NOT EXISTS students(id INTEGER PRIMARY KEY,name TEXT,score INTEGER)")
c.execute("INSERT INTO students(name,score) ______(?,?)",("张三",85))
conn.commit()
conn.close()
27.import sqlite3
conn=sqlite3.connect("test.db")
c=conn.cursor()
try:
c.execute("CREATE TABLE users(id INT,name TEXT)")
c.execute("INSERT INTO users VALUES(1,'admin')")
c.execute("SELECT * FROM users WHERE name='"+name+"'")
print(c.fetchall())
except:
pass
conn.close()
28.import sqlite3
conn=sqlite3.connect(":memory:")
c=conn.cursor()
c.execute("CREATE TABLE scores(name TEXT,score INT)")
data=[("A",85),("B",92),("C",78),("D",88)]
c.executemany("INSERT INTO scores VALUES(?,?)",data)
c.execute("SELECT * FROM scores WHERE score>=80 ORDER BY score DESC")
rows=c.fetchall()
print(len(rows))
print(rows[0])
print(rows[-1])
c.execute("SELECT AVG(score) FROM scores")
print(round(c.fetchone()[0],1))
四、程序设计题(3题,29/30各6分/31各8分)
29.创建数据库students.db,建表scores(sid INTEGER PRIMARY KEY,name TEXT,math INT,chinese INT),插入3条记录,查询所有记录输出。
30.查询students.db中数学>80的学生姓名和数学成绩,按数学成绩降序排列输出。
31.更新students.db:将"张三"的数学成绩+5分,查询更新后的记录,若"张三"不存在输出提示。
五、综合应用题(共1题,每题12分,共12分)
32.设计学生成绩管理系统:(1)建表students(id自增,name,class)和scores(sid,subject,score)两表关联;(2)插入班级和学生数据;(3)查询每个学生的总分和平均分,按总分降序输出排名;(4)输出统计:总人数、平均分最高科目。使用JOIN和聚合函数实现。
原创精品资源学科网独家享有版权,侵权必究!
学科网(北京)股份有限公司
学科网(北京)股份有限公司
学科网(北京)股份有限公司
$
编写说明:2027版安徽省普通高校对口招生考试电子与信息大类(计算机类)专业《考纲百套卷》,依据《安徽省普通高校对口招生专业理论和技能测试考试纲要(2025年版)》编写。本专辑涵盖三个部分,第一部分为知识训练卷,第二部分为专题训练卷,第三部分为课程综合卷。本专辑共99份试卷,其中知识训练卷75份、专题训练卷17份、课程综合卷9份。
本试卷是第75卷,为知识训练卷,按《计算机编程基础—Python语言》中“数据库的使用”范围和要求编写。具体内容为:1.Python 数据库应用接口(B)。2.Sqlite3 模块(C)。3.数据表的创建(B)。4.数据表的操作(C)。
安徽省对口招生考试
电子与信息大类(计算机类)《考纲百套卷》
第75卷 计算机编程基础—Python语言——数据库的使用
(考试时间:45分钟 满分:100分)
一、填空题(共10题,每题2分,共20分)
1.Python内置的轻量级数据库模块是__________。
【答案】sqlite3
【解析】sqlite3是Python内置轻量级数据库模块无需额外安装。数据库存为单一磁盘文件,适合小型应用和嵌入式场景。
2.连接SQLite数据库使用__________函数,返回连接对象。
【答案】sqlite3.connect()
【解析】connect(dbfile)连接SQLite数据库文件,文件不存在则自动创建。返回Connection对象管理事务,用完需close()释放连接。
3.执行SQL语句需先创建__________对象,通过连接的__________方法获取。
【答案】游标、cursor()
【解析】游标通过conn.cursor()创建,用于执行SQL语句和获取查询结果。execute(sql,params)执行SQL,参数化查询防注入。
4.插入/更新/删除数据后,必须调用__________方法才能将更改持久化到数据库。
【答案】commit()
【解析】commit()提交事务将更改持久化保存到磁盘。rollback()回滚撤销未提交的更改。SQLite默认需显式调用commit保存数据。
5.查询结果后,使用__________方法获取所有行,返回__________类型。
【答案】fetchall()、列表
【解析】游标执行查询 SQL 后,fetchall()一次性取出全部查询行,整体以嵌套列表格式返回;fetchone()仅读取单行记录。
6.创建表的SQL关键字是__________,插入数据的关键字是__________。
【答案】CREATE TABLE、INSERT INTO
【解析】CREATE TABLE是建表核心 SQL 语句;INSERT INTO用于向数据表新增插入记录。
7.使用__________语法可防止SQL注入攻击,而非直接拼接字符串。
【答案】参数化查询/占位符
【解析】采用占位符参数化传参,SQL 语句与变量数据分离,杜绝字符串拼接带来的 SQL 注入漏洞,同时自动处理字符串引号、特殊字符。
8.SQLite中整数类型的关键字是__________,文本类型是__________。
【答案】INTEGER、TEXT
【解析】SQLite 内置字段类型,INTEGER存储整型数值,TEXT用于存储字符串、文本内容。
9.获取刚插入数据的自增主键ID,使用游标的__________属性。
【答案】lastrowid
【解析】游标对象lastrowid属性,可以直接拿到上一条 INSERT 语句生成的自增主键值。
10.查询条件WHERE age>18中,获取结果行数的SQL函数是__________。
【答案】COUNT()
【解析】COUNT()为统计聚合函数,搭配 WHERE 条件可以统计满足条件的数据总条数。
二、单项选择题(共15题,每题2分,共30分)
11.cursor.execute(sql)返回( )
A.游标对象
B.结果列表
C.影响行数
D.布尔值
【答案】A
【解析】execute返回游标自身,支持链式调用如c.execute(sql).fetchall()。结果通过fetch方法获取。
12.conn.commit()的作用( )
A.关闭连接
B.提交事务
C.回滚
D.执行SQL
【答案】B
【解析】commit持久化更改。rollback撤销未提交更改。不调用commit可能导致数据丢失。
13.防止SQL注入的正确做法( )
A.检查输入
B.参数化查询
C.过滤引号
D.限制长度
【答案】B
【解析】参数化查询用?占位符将数据与SQL分离。字符串拼接易受注入攻击。参数化由数据库引擎安全处理。
14.SQLite连接文件不存在时( )
A.报错
B.创建新文件
C.返回None
D.忽略
【答案】B
【解析】connect文件不存在自动创建。但表需手动CREATE TABLE创建。内存数据库用connect(":memory:")。
15.SELECT * FROM t 结果获取( )
A.execute直接返回
B.fetchall
C.fetch
D.get
【答案】B
【解析】execute返回游标,需fetchall/fetchone获取结果。cur.description获取列信息。
16.INTEGER PRIMARY KEY 的作用( )
A.唯一标识+自增
B.只能放整数
C.必须手动赋值
D.只读
【答案】A
【解析】INTEGER PRIMARY KEY在SQLite中自动成为rowid别名。未赋值时自增。每表只能一个。
17.UPDATE t SET age=20 缺少WHERE( )
A.报错
B.更新所有行
C.不执行
D.更新一行
【答案】B
【解析】无条件UPDATE更新所有行age=20极危险。DELETE同理。生产环境必须加WHERE限定。
18.c.execute("SELECT * FROM t WHERE id=?", (1,))中(1,)( )
A.语法错误
B.单元素元组
C.列表
D.字典
【答案】B
【解析】参数必须可迭代对象。(1)是整数非元组,(1,)才是单元素元组。逗号不能省否则SQL报参数个数错。
19.conn.close()调用后( )
A.SQL不执行
B.连接释放
C.数据库删除
D.自动commit
【答案】B
【解析】close释放连接资源。未提交更改可能丢失(取决于设置)。建议with语句自动管理。
20.CREATE TABLE IF NOT EXISTS作用( )
A.强制创建
B.表存在跳过
C.删除重建
D.报错
【答案】B
【解析】IF NOT EXISTS避免重复创建错误。同理DROP TABLE IF EXISTS安全删除。幂等性脚本常用。
21.SQLite中AUTOINCREMENT关键字( )
A.必需
B.可选
C.不支持
D.仅主键
【答案】B
【解析】INTEGER PRIMARY KEY已自增,AUTOINCREMENT额外保证ID不重用(即使删除记录)。普通自增可重用。
22.GROUP BY子句的作用( )
A.排序
B.分组聚合
C.过滤
D.连接
【答案】B
【解析】GROUP BY按列分组配合聚合函数COUNT/SUM/AVG。HAVING过滤分组后结果。ORDER BY排序结果。
23.c.execute(sql)执行失败会( )
A.返回None
B.抛出异常
C.静默失败
D.自动重试
【答案】B
【解析】SQL语法错/约束违反抛出sqlite3.Error异常。需try-except处理。OperationalError表不存在等。
24.LIKE用于模糊查询,%表示( )
A.单字符
B.任意多个字符
C.转义
D.数字
【答案】B
【解析】%零到多字符通配。_单个字符。LIKE大小写不敏感(ASCII)。name LIKE '张%'匹配张开头。
25.conn=sqlite3.connect(":memory:")存储( )
A.临时文件
B.内存
C.磁盘文件
D.不存储
【答案】B
【解析】:memory:数据库在内存中,速度快连接关闭数据消失。适合测试和临时缓存。
三、程序分析题(共3题,每题6分,共18分)
26.import sqlite3
conn=sqlite3.connect("test.db")
c=conn.______
c.______("CREATE TABLE IF NOT EXISTS students(id INTEGER PRIMARY KEY,name TEXT,score INTEGER)")
c.execute("INSERT INTO students(name,score) ______(?,?)",("张三",85))
conn.commit()
conn.close()
【答案】(1)cursor()(2分);(2)execute(2分);(3)VALUES(2分)。
【解析】cursor获取游标。execute执行SQL创建表和插入。VALUES后跟参数化占位符?。commit提交事务持久化数据。
27.import sqlite3
conn=sqlite3.connect("test.db")
c=conn.cursor()
try:
c.execute("CREATE TABLE users(id INT,name TEXT)")
c.execute("INSERT INTO users VALUES(1,'admin')")
c.execute("SELECT * FROM users WHERE name='"+name+"'")
print(c.fetchall())
except:
pass
conn.close()
【答案】(1)SQL注入风险:SELECT中字符串拼接name变量,应改为参数化c.execute("SELECT * FROM users WHERE name=?",(name,))(4分);(2)缺少conn.commit()(2分)。
【解析】变量直接拼接到SQL极其危险,用户输入可注入恶意SQL。参数化查询?占位符是安全做法。插入后需commit持久化。
28.import sqlite3
conn=sqlite3.connect(":memory:")
c=conn.cursor()
c.execute("CREATE TABLE scores(name TEXT,score INT)")
data=[("A",85),("B",92),("C",78),("D",88)]
c.executemany("INSERT INTO scores VALUES(?,?)",data)
c.execute("SELECT * FROM scores WHERE score>=80 ORDER BY score DESC")
rows=c.fetchall()
print(len(rows))
print(rows[0])
print(rows[-1])
c.execute("SELECT AVG(score) FROM scores")
print(round(c.fetchone()[0],1))
【答案】3
('B', 92)
('A', 85)
85.8
【解析】内存数据库。executemany批量插入4条。WHERE筛选>=80分3条。ORDER BY DESC降序排列首行B(92)末行A(85)。AVG聚合函数求平均=(85+92+78+88)/4=85.75→round得85.8。
四、程序设计题(3题,29/30各6分/31各8分)
29.创建数据库students.db,建表scores(sid INTEGER PRIMARY KEY,name TEXT,math INT,chinese INT),插入3条记录,查询所有记录输出。
【答案】import sqlite3
conn=sqlite3.connect('students.db')
c=conn.cursor()
c.execute('CREATE TABLE IF NOT EXISTS scores(sid INTEGER PRIMARY KEY AUTOINCREMENT,name TEXT,math INT,chinese INT)')
data=[('张三',85,92),('李四',78,88),('王五',95,90)]
c.executemany('INSERT INTO scores(name,math,chinese) VALUES(?,?,?)',data)
conn.commit()
c.execute('SELECT * FROM scores')
for row in c.fetchall():print(row)
conn.close()
【解析】IF NOT EXISTS避免重复建表。executemany批量插入效率高于多次execute。fetchall获取所有行循环输出。commit持久化。
30.查询students.db中数学>80的学生姓名和数学成绩,按数学成绩降序排列输出。
【答案】import sqlite3
conn=sqlite3.connect('students.db')
c=conn.cursor()
c.execute('SELECT name,math FROM scores WHERE math>80 ORDER BY math DESC')
rows=c.fetchall()
if rows:
for name,score in rows:
print(name,score)
else:
print('无符合条件记录')
conn.close()
【解析】SELECT指定列。WHERE math>80过滤。ORDER BY math DESC降序。fetchall后检查空列表处理无数据情况。close释放连接。
31.更新students.db:将"张三"的数学成绩+5分,查询更新后的记录,若"张三"不存在输出提示。
【答案】import sqlite3
conn=sqlite3.connect('students.db')
c=conn.cursor()
c.execute('SELECT * FROM scores WHERE name=?',('张三',))
row=c.fetchone()
if row:
c.execute('UPDATE scores SET math=math+5 WHERE name=?',('张三',))
conn.commit()
c.execute('SELECT * FROM scores WHERE name=?',('张三',))
print(c.fetchone())
else:
print('张三不存在')
conn.close()
【解析】先SELECT检查记录是否存在。UPDATE SET math=math+5在原值上加5。参数化防止注入。commit持久化。fetchone获取一行。
五、综合应用题(共1题,每题12分,共12分)
32.设计学生成绩管理系统:(1)建表students(id自增,name,class)和scores(sid,subject,score)两表关联;(2)插入班级和学生数据;(3)查询每个学生的总分和平均分,按总分降序输出排名;(4)输出统计:总人数、平均分最高科目。使用JOIN和聚合函数实现。
【答案】import sqlite3
conn=sqlite3.connect('school.db')
c=conn.cursor()
c.executescript('''
CREATE TABLE IF NOT EXISTS students(id INTEGER PRIMARY KEY AUTOINCREMENT,name TEXT,class TEXT);
CREATE TABLE IF NOT EXISTS scores(sid INTEGER,subject TEXT,score INTEGER,
FOREIGN KEY(sid) REFERENCES students(id));
''')
c.execute('DELETE FROM scores');c.execute('DELETE FROM students')
s_data=[('张三','1班'),('李四','1班'),('王五','2班')]
c.executemany('INSERT INTO students(name,class) VALUES(?,?)',s_data)
sc_data=[(1,'语文',85),(1,'数学',92),(2,'语文',78),(2,'数学',88),(3,'语文',95),(3,'数学',90)]
c.executemany('INSERT INTO scores(sid,subject,score) VALUES(?,?,?)',sc_data)
conn.commit()
c.execute('''SELECT s.name,s.class,SUM(sc.score),ROUND(AVG(sc.score),1)
FROM students s JOIN scores sc ON s.id=sc.sid
GROUP BY s.id ORDER BY SUM(sc.score) DESC''')
print('排名 姓名 班级 总分 平均分')
for i,row in enumerate(c.fetchall(),1):
print(i,row[0],row[1],row[2],row[3])
c.execute('SELECT COUNT(*) FROM students')
print('总人数:',c.fetchone()[0])
c.execute('SELECT subject,AVG(score) FROM scores GROUP BY subject ORDER BY AVG(score) DESC LIMIT 1')
best=c.fetchone()
print('平均最高科目:'+best[0]+str(round(best[1],1)))
conn.close()
【解析】两表关联:students存学生信息,scores存成绩。FOREIGN KEY建立外键关联。JOIN连接两表查询。GROUP BY按学生分组求总分和平均分。ORDER BY DESC降序排名。子查询+聚合函数统计分析。
原创精品资源学科网独家享有版权,侵权必究!
学科网(北京)股份有限公司
学科网(北京)股份有限公司
学科网(北京)股份有限公司
$