Python使用sqlite3模塊內(nèi)置數(shù)據(jù)庫
1、python內(nèi)置的sqlite3模塊,創(chuàng)建數(shù)據(jù)庫中的表,并向表中插入數(shù)據(jù),從表中取出所有行,以及輸出行的數(shù)量。
#!/usr/bin/env python3
#創(chuàng)建SQLite3內(nèi)存數(shù)據(jù)庫,并創(chuàng)建帶有四個(gè)屬性的sales表
#sqlite3模塊,提供了一個(gè)輕量級的基于磁盤的數(shù)據(jù)庫,不需要獨(dú)立的服務(wù)器進(jìn)程
import sqlite3
#使用‘:memory:'在內(nèi)存中創(chuàng)建了一個(gè)數(shù)據(jù)庫,創(chuàng)建了連接對象con來代表數(shù)據(jù)庫
con = sqlite3.connect(':memory:')
#創(chuàng)建表名為sales的表,將這個(gè)字符串賦值給query
query = """CREATE TABLE sales
(customer VARCHAR(20),
product VARCHAR(40),
amount FLOAT,
date DATE);"""
#使用連接對象的execute()方法執(zhí)行query中的SQL命令
con.execute(query)
#使用連接對象的commit()方法將修改提交(保存)到數(shù)據(jù)庫
con.commit()
#向表中插入幾行數(shù)據(jù)
data = [('Richard Lucas','Notepad',2.50,'2019-01-02'),
('Jenny Kim','Binder',4.15,'2019-01-05'),
('Svetlana Crow','Printer',155.75,'2019-02-03'),
('Stephen Randolph','Computer',679.40,'2019-02-20')]
#將插入語句賦給變量statement,?是占位符
statement = "INSERT INTO sales VALUES(?,?,?,?)"
#因?yàn)橛兴膫€(gè)占位符,這里就需要提供一個(gè)包含4個(gè)值的元組,executemany()方法為data中的每個(gè)數(shù)據(jù)元組執(zhí)行
#statement中的SQL命令,這里執(zhí)行了四次insert命令
con.executemany(statement,data)
#將修改保存到數(shù)據(jù)庫
con.commit()
#查詢sales表,并將命令結(jié)果賦值給一個(gè)光標(biāo)對象cursor,光標(biāo)對象有execute、executemany、fetchone、
#fetchmany和fetchall方法
cursor = con.execute("SELECT * FROM sales")
#返回結(jié)果集中的所有行
rows = cursor.fetchall()
print(rows)
print('………………')
#查詢結(jié)果中行的數(shù)量
row_counter = 0
for row in rows:
print(row)
row_counter += 1
print('………………')
print('Number of rows: %d' % (row_counter))
Spyder右下角打印出來的結(jié)果:
[('Richard Lucas', 'Notepad', 2.5, '2019-01-02'), ('Jenny Kim', 'Binder', 4.15, '2019-01-05'), ('Svetlana Crow', 'Printer', 155.75, '2019-02-03'), ('Stephen Randolph', 'Computer', 679.4, '2019-02-20')]
………………
('Richard Lucas', 'Notepad', 2.5, '2019-01-02')
('Jenny Kim', 'Binder', 4.15, '2019-01-05')
('Svetlana Crow', 'Printer', 155.75, '2019-02-03')
('Stephen Randolph', 'Computer', 679.4, '2019-02-20')
………………
Number of rows: 4
2、python內(nèi)置的sqlite3模塊,向表中插入新紀(jì)錄
名稱為“CSV測試數(shù)據(jù).csv”的數(shù)據(jù)源:

將本地“CSV測試數(shù)據(jù).csv”的數(shù)據(jù)導(dǎo)入到本地?cái)?shù)據(jù)庫football_game.db中:
#!/usr/bin/env python3
#創(chuàng)建SQLite3內(nèi)存數(shù)據(jù)庫,并創(chuàng)建帶有四個(gè)屬性的sales表
#sqlite3模塊,提供了一個(gè)輕量級的基于磁盤的數(shù)據(jù)庫,不需要獨(dú)立的服務(wù)器進(jìn)程
import sqlite3
import csv
input_file = "F://python入門//數(shù)據(jù)1//CSV測試數(shù)據(jù).csv"
#為一個(gè)簡單的本地?cái)?shù)據(jù)庫football_game.db創(chuàng)建連接,football_game.db為數(shù)據(jù)庫名稱
con = sqlite3.connect('football_game.db')
#創(chuàng)建了一個(gè)光標(biāo)
c = con.cursor()
#如果表名存在,則刪除它
drop_table = """DROP TABLE IF EXISTS football_game;"""
c.execute(drop_table)
con.commit()
#創(chuàng)建表名為football_game的表,將這個(gè)字符串賦值給create_table
create_table = """CREATE TABLE IF NOT EXISTS football_game
(name VARCHAR(20),
sex VARCHAR(10),
age INT,
score INT,
device_number VARCHAR(20),
cost VARCHAR(20));"""
#使用連接對象的execute()方法執(zhí)行create_table中的SQL命令
c.execute(create_table)
#使用連接對象的commit()方法將修改提交(保存)到數(shù)據(jù)庫
con.commit()
#從CSV格式的輸入文件中讀取要加載到數(shù)據(jù)庫中的數(shù)據(jù),創(chuàng)建file_reader對象,用于存儲CSV中的數(shù)據(jù)集
file_reader = csv.reader(open(input_file,'r'),delimiter=',')
#從輸入文件中讀入第一行
header = next(file_reader,None)
#將輸入的所有數(shù)據(jù)進(jìn)行循環(huán),先是每行循環(huán),再是每列循環(huán)
for row in file_reader:
data = []
for column_index in range(len(header)):
data.append(row[column_index])
print(data)
c.execute("INSERT INTO football_game VALUES(?,?,?,?,?,?)",data)
#將修改保存到數(shù)據(jù)庫
con.commit()
print('………………')
#執(zhí)行選擇所有數(shù)據(jù)的SQL
output = c.execute("SELECT * FROM football_game")
#返回結(jié)果集中的所有行,返回的是一個(gè)大的列表
rows = output.fetchall()
print(rows)
print('………………')
for row in rows:
output = []
for column_index in range(len(row)):
output.append(str(row[column_index]))
print(output)
Spyder右下角打印出來的結(jié)果:
['李剛', '男', '32', '567', '18512349553', '$500.00 ']
['王紅', '女', '54', '423', '18256785181', '$750.00 ']
['孫曉', '女', '25', '457', '13698762112', '$250.00 ']
['郭亮', '男', '65', '350', '18654320816', '$125.00 ']
['高英', '女', '15', '390', '18511113141', '$815.00 ']
………………
[('李剛', '男', 32, 567, '18512349553', '$500.00 '), ('王紅', '女', 54, 423, '18256785181', '$750.00 '), ('孫曉', '女', 25, 457, '13698762112', '$250.00 '), ('郭亮', '男', 65, 350, '18654320816', '$125.00 '), ('高英', '女', 15, 390, '18511113141', '$815.00 ')]
………………
['李剛', '男', '32', '567', '18512349553', '$500.00 ']
['王紅', '女', '54', '423', '18256785181', '$750.00 ']
['孫曉', '女', '25', '457', '13698762112', '$250.00 ']
['郭亮', '男', '65', '350', '18654320816', '$125.00 ']
['高英', '女', '15', '390', '18511113141', '$815.00 ']
3、python內(nèi)置的sqlite3模塊,更新數(shù)據(jù)表中的記錄
名稱為“CSV測試數(shù)據(jù).csv”的數(shù)據(jù)源:

更新表中的記錄:
#!/usr/bin/env python3
#創(chuàng)建SQLite3內(nèi)存數(shù)據(jù)庫,并創(chuàng)建帶有四個(gè)屬性的sales表
#sqlite3模塊,提供了一個(gè)輕量級的基于磁盤的數(shù)據(jù)庫,不需要獨(dú)立的服務(wù)器進(jìn)程
import sqlite3
import csv
input_file = "F://python入門//數(shù)據(jù)1//CSV測試數(shù)據(jù).csv"
#使用‘:memory:'在內(nèi)存中創(chuàng)建了一個(gè)數(shù)據(jù)庫,創(chuàng)建了連接對象con來代表數(shù)據(jù)庫
con = sqlite3.connect(':memory:')
#創(chuàng)建表名為sales的表,將這個(gè)字符串賦值給query
query = """CREATE TABLE IF NOT EXISTS sales
(customer VARCHAR(20),
product VARCHAR(40),
amount FLOAT,
date DATE);"""
#使用連接對象的execute()方法執(zhí)行query中的SQL命令
con.execute(query)
#使用連接對象的commit()方法將修改提交(保存)到數(shù)據(jù)庫
con.commit()
#向表中插入幾行數(shù)據(jù)
data = [('Richard Lucas','Notepad',2.50,'2019-01-02'),
('Jenny Kim','Binder',4.15,'2019-01-05'),
('Svetlana Crow','Printer',155.75,'2019-02-03'),
('Stephen Randolph','Computer',679.40,'2019-02-20')]
#for tuple in data:
# print(tuple)
#將插入語句賦給變量statement,?是占位符
statement = "INSERT INTO sales VALUES(?,?,?,?)"
#因?yàn)橛兴膫€(gè)占位符,這里就需要提供一個(gè)包含4個(gè)值的元組,executemany()方法為data中的每個(gè)數(shù)據(jù)元組執(zhí)行
#statement中的SQL命令,這里執(zhí)行了四次insert命令
con.executemany(statement,data)
#將修改保存到數(shù)據(jù)庫
con.commit()
#讀取CSV文件并更新特定的行
file_reader = csv.reader(open(input_file,'r'),delimiter=',')
#從輸入文件中讀入第一行
header = next(file_reader,None)
#將輸入的所有數(shù)據(jù)進(jìn)行循環(huán),先是每行循環(huán),再是每列循環(huán)
for row in file_reader:
data = []
for column_index in range(len(header)):
data.append(row[column_index])
con.execute("UPDATE sales SET amount=?,date=? where customer=?;",data)
#將修改保存到數(shù)據(jù)庫
con.commit()
#查詢sales表,并將命令結(jié)果賦值給一個(gè)光標(biāo)對象cursor,光標(biāo)對象有execute、executemany、fetchone、
#fetchmany和fetchall方法
cursor = con.execute("SELECT * FROM sales")
#返回結(jié)果集中的所有行
rows = cursor.fetchall()
print(rows)
print('………………')
for row in rows:
output = []
for column_index in range(len(row)):
output.append(str(row[column_index]))
print(output)
Spyder右下角打印出來的結(jié)果:
[('Richard Lucas', 'Notepad', 4.25, '2019-11-05'), ('Jenny Kim', 'Binder', 6.75, '2019-12-05'), ('Svetlana Crow', 'Printer', 155.75, '2019-02-03'), ('Stephen Randolph', 'Computer', 679.4, '2019-02-20')]
………………
['Richard Lucas', 'Notepad', '4.25', '2019-11-05']
['Jenny Kim', 'Binder', '6.75', '2019-12-05']
['Svetlana Crow', 'Printer', '155.75', '2019-02-03']
['Stephen Randolph', 'Computer', '679.4', '2019-02-20']
以上就是本文的全部內(nèi)容,希望對大家的學(xué)習(xí)有所幫助,也希望大家多多支持腳本之家。
相關(guān)文章
Python?Bleach保障網(wǎng)絡(luò)安全防止網(wǎng)站受到XSS(跨站腳本)攻擊
Bleach?不僅可以清理?HTML?文檔,還能夠?qū)︽溄舆M(jìn)行處理,檢查是否是合法格式,并可以使用白名單來控制哪些?HTML?標(biāo)簽、屬性是安全的,因此非常適合用于清潔用戶輸入的數(shù)據(jù),確保網(wǎng)站安全2024-01-01
python實(shí)現(xiàn)百度關(guān)鍵詞排名查詢
這篇文章主要介紹了python實(shí)現(xiàn)百度關(guān)鍵詞排名查詢,需要的朋友可以參考下2014-03-03
python 創(chuàng)建一維的0向量實(shí)例
今天小編就為大家分享一篇python 創(chuàng)建一維的0向量實(shí)例,具有很好的參考價(jià)值,希望對大家有所幫助。一起跟隨小編過來看看吧2019-12-12
淺談Pytorch中autograd的若干(踩坑)總結(jié)
這篇文章主要介紹了Pytorch中autograd的若干(踩坑)總結(jié),具有很好的參考價(jià)值,希望對大家有所幫助。一起跟隨小編過來看看吧2021-05-05
Python中動態(tài)創(chuàng)建類實(shí)例的方法
在Java中我們可以通過反射來根據(jù)類名創(chuàng)建類實(shí)例,那么在Python我們怎么實(shí)現(xiàn)類似功能呢?其實(shí)在Python有一個(gè)builtin函數(shù)import,我們可以使用這個(gè)函數(shù)來在運(yùn)行時(shí)動態(tài)加載一些模塊2017-03-03
python使用ddddocr庫識別滑動驗(yàn)證碼簡單代碼示例
這篇文章主要介紹了如何使用ddddocr庫來識別滑塊驗(yàn)證碼,并提供了一個(gè)示例代碼和識別結(jié)果,同時(shí)提醒注意ddddocr庫的大小限制,可能會影響某些無服務(wù)器函數(shù)的部署,需要的朋友可以參考下2024-11-11
python通過socket搭建極簡web服務(wù)器的實(shí)現(xiàn)代碼
python的web框架眾多,常見的如django、flask、tornado等,其底層是什么還是有些許的疑問,所以查找相關(guān)資料,實(shí)現(xiàn)瀏覽器訪問,并返回相關(guān)信息,本文將給大家介紹python通過socket搭建極簡web服務(wù)器,需要的朋友可以參考下2023-10-10
PyCharm提示No Python Interpreter的正確解決辦法
剛學(xué)Python時(shí),拿到一個(gè)Python項(xiàng)目,想用pycharm打開運(yùn)行卻報(bào)錯了,這篇文章主要給大家介紹了關(guān)于PyCharm提示No Python Interpreter的正確解決辦法,需要的朋友可以參考下2023-10-10

