請編寫函式,在Sqlite中根據分數段查詢指定的名字 —— python學習筆記
阿新 • • 發佈:2019-01-08
1. 題目:
請編寫函式,在 Sqlite 中根據分數段查詢指定的名字:
題目是廖雪峰老師的python教程中 SQLite 的練習。
本篇博文只是針對這一題目,沒有做詳細的介紹,如果看不懂可以在下面評論問我,我會及時回覆的。
2. 程式碼如下:
2.1 我個人的解法
本次的題目還是具有一些難度的,分別包括準備資料(建立資料庫,建立表,插入資料)和查詢資料兩個部分,所以程式碼比較比較詳細,做了相應的註釋。
第一部分:準備資料
#!/usr/bin/env python3
# -*- coding: utf-8 -*-
# @Time : 2019/1/6 11:46
# @Author : Arrow and Bullet
# @FileName: publish.py
# @Software: PyCharm
# @Blog :https://blog.csdn.net/qq_41800366
import os
import sqlite3 # 匯入SQLite驅動:
db_file = os.path.join(os.path.dirname(__file__), 'test.db') # 資料庫的建立
if os.path.isfile(db_file): # 如果存在這個同名檔案的話刪除掉
os.remove(db_file)
# 初始資料:
conn = sqlite3.connect(db_file) # 連線到SQLite資料庫
cursor = conn.cursor() # 建立一個Cursor:
cursor.execute('create table user(id varchar(20) primary key, name varchar(20), score int)') # 執行一條SQL語句,建立user表:
cursor.execute(r"insert into user values ('A-001', 'Adam', 95)") # 繼續執行一條SQL語句,插入一條記錄:
cursor.execute(r"insert into user values ('A-002', 'Bart', 62)") # 繼續執行一條SQL語句,插入一條記錄:
cursor.execute(r"insert into user values ('A-003', 'Lisa', 78)") # 繼續執行一條SQL語句,插入一條記錄:
cursor.close() # 關閉Cursor:
conn.commit() # 提交事務:
conn.close() # 關閉Connection:
第二部分:查詢資料
import sqlite3 # 匯入SQLite驅動:
from operator import itemgetter
def get_score_in(low, high):
# 返回指定分數區間的名字,按分數從低到高排序
conn = sqlite3.connect('test.db')
cursor = conn.cursor()
cursor.execute('select * from user') # 執行查詢語句
values = cursor.fetchall() # 獲得查詢結果集,結果集是一個list,每個元素為一個tuple
values = sorted(values, key=itemgetter(2)) # 通過sorted 根據分數來對結果集排序
result = []
for i in values: # 迴圈
if low <= i[2] <= high: # 篩選
result.append(i[1]) # 結果
return result # 返回
# 測試:
print(get_score_in(80, 95))
print(get_score_in(60, 80))
print(get_score_in(60, 100))
assert get_score_in(80, 95) == ['Adam'], get_score_in(80, 95)
assert get_score_in(60, 80) == ['Bart', 'Lisa'], get_score_in(60, 80)
assert get_score_in(60, 100) == ['Bart', 'Lisa', 'Adam'], get_score_in(60, 100)
print('Pass')
結果如下
# result
# ['Adam']
# ['Bart', 'Lisa']
# ['Bart', 'Lisa', 'Adam']
# Pass
希望能夠幫助到大家,有什麼問題可以 直接評論即可,如果不夠詳細的話也可以說,我會及時回覆的。