當(dāng)使用Python進(jìn)行SQLite數(shù)據(jù)庫(kù)操作時(shí),sqlite3
模塊是一個(gè)非常常用和強(qiáng)大的工具。它提供了一系列函數(shù)和方法,用于創(chuàng)建、連接、查詢和管理數(shù)據(jù)庫(kù)。下面是一些常見(jiàn)的用法示例:
import sqlite3
#連接到現(xiàn)有數(shù)據(jù)庫(kù)Connection個(gè)新數(shù)據(jù)庫(kù)
conn = sqlite3.connect('stockssqlite3.db')
# 創(chuàng)建內(nèi)存中的數(shù)據(jù)庫(kù)(不保存到磁盤(pán))
# conn = sqlite3.connect(':memory:')
# 獲取數(shù)據(jù)庫(kù)游標(biāo)
cursor = conn.cursor()
# 創(chuàng)建表
# cursor.execute('''CREATE TABLE stocks2(date text, symbol text, price real)''')
# 插入數(shù)據(jù)
# cursor.execute("INSERT INTO stocks2 VALUES ('2023-07-01', 'WL22', 140.34)")
# cursor.execute("INSERT INTO stocks VALUES ('2023-07-02', 'HengDa', 2515.62)")
# 提交更改
conn.commit()
# # 更新數(shù)據(jù)
cursor.execute("UPDATE stocks SET price =888 WHERE symbol = 'WL'")
# conn.commit()
# 刪除數(shù)據(jù)
cursor.execute("DELETE FROM stocks WHERE symbol = 'HengDa'")
conn.commit()
# 使用參數(shù)化查詢防止SQL注入
symbol = 'WL'
cursor.execute("SELECT * FROM stocks WHERE symbol=?", (symbol,))
rows2 = cursor.fetchall()
# 遍歷查詢結(jié)果
for row in rows2:
print('WL: ',row)
# # 開(kāi)始事務(wù)
# conn.execute("BEGIN TRANSACTION")
# # 執(zhí)行多個(gè)操作
# cursor.execute("INSERT INTO stocks VALUES ('2023-07-03', 'MSFT', 278.21)")
# cursor.execute("INSERT INTO stocks VALUES ('2023-07-04', 'AMZN', 3606.02)")
# # 提交事務(wù)
# conn.commit()
# 批量插入數(shù)據(jù)
# data = [('2023-07-05', 'SanAN', 144.50),
# ('2023-07-05', 'ZXGJ', 2540.10),
# ('2023-07-05', 'MaoTai', 280.50)]
# cursor.executemany("INSERT INTO stocks VALUES (?, ?, ?)", data)
# conn.commit()
try:
# 開(kāi)始事務(wù)
conn.execute("BEGIN TRANSACTION")
# 執(zhí)行一些操作
cursor.execute("INSERT INTO stocks VALUES ('2023-07-06', 'WuHanD', 148.20)")
cursor.execute("INSERT INTO stocks VALUES ('2023-07-06', 'GOOGL', 2570.80,'55')")
# 拋出異常,觸發(fā)回滾
raise Exception("Some error occurred")
# 提交事務(wù)
conn.commit()
except Exception as e:
# 發(fā)生異常,回滾事務(wù)
conn.rollback()
print("Transaction rolled back:", str(e))
# # 使用命名參數(shù)化查詢
# symbol = 'AAPL'
# price = 150.25
# cursor.execute("SELECT * FROM stocks WHERE symbol=:symbol AND price>=:price", {'symbol': symbol, 'price': price})
# 查詢數(shù)據(jù)
cursor.execute("SELECT * FROM stocks")
rows = cursor.fetchall()
# 遍歷查詢結(jié)果 獲取所有行數(shù)據(jù)
for row in rows:
print(row)
# 獲取部分行數(shù)據(jù)
cursor.execute("SELECT * FROM stocks2 LIMIT 5")
rows = cursor.fetchmany(3)
for row in rows:
print('stocks2 fetchmany(3): ',row)
# 獲取查詢結(jié)果的列信息
cursor.execute("SELECT * FROM stocks")
columns = [description[0] for description in cursor.description]
print(columns)
# 創(chuàng)建索引
# cursor.execute("CREATE INDEX idx_symbol ON stocks (symbol)")
conn.commit()
# 執(zhí)行查詢(使用索引)
cursor.execute("SELECT * FROM stocks WHERE symbol = 'WK'")
result = cursor.fetchall()
print(result)
# 創(chuàng)建觸發(fā)器
# 該語(yǔ)句指定了觸發(fā)器的名稱update_price
# 觸發(fā)的事件AFTER UPDATE OF price ON stocks,以及在觸發(fā)時(shí)要執(zhí)行的操作。
# 觸發(fā)器是強(qiáng)大的數(shù)據(jù)庫(kù)功能,可以用于在特定事件發(fā)生時(shí)自動(dòng)執(zhí)行復(fù)雜的操作。它們可以用于實(shí)現(xiàn)數(shù)據(jù)完整性約束、記錄日志、更新其他表的數(shù)據(jù)等
# cursor.execute("""
# CREATE TRIGGER update_price
# AFTER UPDATE OF price ON stocks
# BEGIN
# -- 觸發(fā)時(shí)執(zhí)行的操作
# UPDATE stocks2 SET price = 5555 WHERE symbol = 'WL22';
# END
# """)
# conn.commit()
# # 刪除觸發(fā)器
# cursor.execute("DROP TRIGGER IF EXISTS update_price")
# # 提交更改
# conn.commit()
# 查詢觸發(fā)器信息
cursor.execute("SELECT name, tbl_name, sql FROM sqlite_master WHERE type='trigger'")
triggers = cursor.fetchall()
# 打印觸發(fā)器信息
for trigger in triggers:
name, tbl_name, sql = trigger
print(f"Name: {name}")
print(f"Table: {tbl_name}")
print(f"SQL: {sql}")
print("-" * 30)
# 獲取數(shù)據(jù)庫(kù)版本號(hào)
cursor.execute("SELECT sqlite_version()")
version = cursor.fetchone()[0]
print("SQLite version:", version)
# 獲取數(shù)據(jù)庫(kù)中的表列表
cursor.execute("SELECT name FROM sqlite_master WHERE type='table'")
tables = cursor.fetchall()
for table in tables:
print("Table name:", table[0])
# 獲取表的列信息
cursor.execute("PRAGMA table_info(stocks)")
columns = cursor.fetchall()
for column in columns:
print("Column name:", column[1])
print("Column type:", column[2])
# 定義用戶自定義函數(shù)
def calculate_total(a, b):
return a + b
# 注冊(cè)用戶自定義函數(shù)
conn.create_function("total", 2, calculate_total)
# 使用用戶自定義函數(shù)
cursor.execute("SELECT total(10, 5)")
result = cursor.fetchone()[0]
print("Total:", result)
import re
# 創(chuàng)建自定義函數(shù)來(lái)進(jìn)行正則表達(dá)式匹配
def regex_match(pattern, string):
return bool(re.match(pattern, string))
# 注冊(cè)自定義函數(shù)
conn.create_function("regex_match", 2, regex_match)
# 使用正則表達(dá)式進(jìn)行查詢
cursor.execute("SELECT * FROM my_table WHERE regex_match('^A.*', name)")
import sqlite3
# 連接到數(shù)據(jù)庫(kù)
conn = sqlite3.connect("mydatabase.db")
cursor = conn.cursor()
# 刪除觸發(fā)器
cursor.execute("DROP TRIGGER IF EXISTS update_price")
# 提交更改
conn.commit()
# 關(guān)閉連接
conn.close()
?
import sqlite3
# 連接到數(shù)據(jù)庫(kù)
conn = sqlite3.connect("mydatabase.db")
cursor = conn.cursor()
# 查詢觸發(fā)器信息
cursor.execute("SELECT name, tbl_name, sql FROM sqlite_master WHERE type='trigger'")
triggers = cursor.fetchall()
# 打印觸發(fā)器信息
for trigger in triggers:
name, tbl_name, sql = trigger
print(f"Name: {name}")
print(f"Table: {tbl_name}")
print(f"SQL: {sql}")
print("-" * 30)
# 關(guān)閉連接
conn.close()
sqlite-utils
、sqlitebiter
和其他類(lèi)似的庫(kù)可以提供更高級(jí)的功能,包括預(yù)編譯語(yǔ)句的執(zhí)行優(yōu)化和數(shù)據(jù)庫(kù)連接池的管理。這些庫(kù)可以作為sqlite3
模塊的擴(kuò)展,提供更便捷和高效的SQLite數(shù)據(jù)庫(kù)操作。下面是這些庫(kù)的簡(jiǎn)要介紹:
-
sqlite-utils
:它是一個(gè)Python庫(kù),提供了許多工具和功能來(lái)簡(jiǎn)化SQLite數(shù)據(jù)庫(kù)的操作。它支持創(chuàng)建、連接、查詢和管理數(shù)據(jù)庫(kù),還提供了高級(jí)功能,如預(yù)編譯語(yǔ)句的執(zhí)行優(yōu)化、數(shù)據(jù)導(dǎo)入導(dǎo)出、數(shù)據(jù)庫(kù)遷移等。你可以使用sqlite-utils
來(lái)執(zhí)行高級(jí)操作,以提高SQLite數(shù)據(jù)庫(kù)的性能和功能。文章來(lái)源:http://www.zghlxwxcb.cn/news/detail-546117.html -
sqlitebiter
:它是一個(gè)命令行工具和Python庫(kù),用于將不同的數(shù)據(jù)源(如CSV、Excel、JSON等)轉(zhuǎn)換為SQLite數(shù)據(jù)庫(kù)。它可以自動(dòng)推斷表結(jié)構(gòu),并將數(shù)據(jù)導(dǎo)入SQLite數(shù)據(jù)庫(kù)中。sqlitebiter
還提供了選項(xiàng)來(lái)優(yōu)化導(dǎo)入過(guò)程,包括使用預(yù)編譯語(yǔ)句和批量插入等。這使得數(shù)據(jù)導(dǎo)入過(guò)程更快速和高效。文章來(lái)源地址http://www.zghlxwxcb.cn/news/detail-546117.html
到了這里,關(guān)于Python數(shù)據(jù)庫(kù)模塊sqlite3操作實(shí)例(非常實(shí)用)的文章就介紹完了。如果您還想了解更多內(nèi)容,請(qǐng)?jiān)谟疑辖撬阉鱐OY模板網(wǎng)以前的文章或繼續(xù)瀏覽下面的相關(guān)文章,希望大家以后多多支持TOY模板網(wǎng)!