數據庫-python SQLite3
- 一:sqlite3 簡介
- 二: sqlite3 流程
- 1> demo
- 2> sqlite3 流程
- 三:sqlite3 step
- 1> create table
- 2> insert into
- 3> update
- 4> select
- 1. fetchall()
- 2. fetchone()
- 3. fetchmany()
- 5> delete
- 6> other step
- 四: Mysql
- 1> Mysql知識詳解
一:sqlite3 簡介
sqlite3 是一個內置的Python模塊,可以通過Python的標準庫輕松地使用,無需進行額外安裝和配置。sqlite3 支持SQL語句,對數據庫的操作簡單高效。因此,sqlite3 非常適用于小型項目和單機應用程序,是Python開發中常用的數據庫解決方案之一,能為程序提供完整的數據庫解決方案.
二: sqlite3 流程
1> demo
utils_sqlite3.py
import sqlite3
import logging
logger = logging.getLogger("utils_sqlite3")def excute_sql(sql_connect, sql_cmd):sql_cursor = sql_connect.cursor()# logging.info(sql_cmd)try:sql_cursor.execute(sql_cmd)sql_connect.commit()sql_cursor.close()except Exception as e:logger.error(f"sqlite3.OperationalError: {e}")raise Exception(f"sqlite3.OperationalError: {e}")
create_tables.py
def init_sqlite(file_name, tabel_name, primary_key):db_connect = sqlite3.connect(file_name)if primary_key:create_table_cmd = '''CREATE TABLE {}(ENTRY TEXT,PART TEXT,PART_LAYER TEXT,CASE_NAME TEXT,API_CONNECT TEXT,API_PARAMETER TEXT,PRIMARY KEY(ENTRY, CASE_NAME))'''.format(tabel_name)else:create_table_cmd = '''CREATE TABLE {}(ENTRY TEXT,PART TEXT,PART_LAYER TEXT,CASE_NAME TEXT,API_CONNECT TEXT,API_PARAMETER TEXT,)'''.format(tabel_name)excute_sql(db_connect, create_table_cmd)db_connect.close()
init_sqlite(performence_log_file, db_table_name, primary_key)
2> sqlite3 流程
step | 流程 |
---|---|
創建和連接數據庫 | import sqlite3 db_connect = sqlite3.connect(file_name) |
創建表格并提交 | sql_cursor = db_connect .cursor() db_connect.commit() sql_cursor.execute(create_table_cmd) |
插入數據并提交 | sql_cursor.execute(insert_sql ) db_connect.commit() |
關閉連接 | sql_cursor.close() db_connect.close() |
三:sqlite3 step
1> create table
import sqlite3
db_connect = sqlite3.connect(file_name)
sql_cursor = sql_connect.cursor()
create_table_cmd = '''CREATE TABLE {}(ENTRY TEXT,PART TEXT,PART_LAYER TEXT,CASE_NAME TEXT,API_CONNECT TEXT,API_PARAMETER TEXT,PRIMARY KEY(ENTRY, CASE_NAME))'''.format(tabel_name)
sql_cursor.execute(create_table_cmd)
sql_connect.commit()sql_cursor.close()
2> insert into
import sqlite3
db_connect = sqlite3.connect(file_name)
sql_cursor = sql_connect.cursor()
insert_sql = '''INSERT INTO {} (ENTRY,PART,PART_LAYER,CASE_NAME,API_CONNECT,API_PARAMETER)VALUES ('{}', '{}', '{}', '{}', '{}', '{}')'''.format(db_table_name, args.entry, args.part, args.part_layer, args.case, connect_res, "NULL")
sql_cursor.execute(insert_sql )
sql_connect.commit()sql_cursor.close()
3> update
import sqlite3
db_connect = sqlite3.connect(file_name)
sql_cursor = sql_connect.cursor()
insert_sql = '''update {} set API_PARAMETER="{}"'''.format(db_table_name, para_res)
sql_cursor.execute(insert_sql )
sql_connect.commit()sql_cursor.close()
4> select
1. fetchall()
fetchall()函數是游標對象(Cursor)的一個方法,用于獲取查詢結果集中的所有行。使用該函數,可以一次性獲取查詢結果集中的所有行,并以列表的形式返回。
import sqlite3
table_name = "interface_test"
db = sqlite3.connect(path)
cursor = db.cursor()
select_sql = '''select* from {} where ENTRY = "{}"'''.format(table_name, "interface")
record_cursor = cursor.execute(select_sql)
records = record_cursor.fetchall()
db.commit()
cursor.close()
db.close()
注意:如果查詢結果集非常大,使用fetchall()函數可能會消耗較多的內存。在這種情況下,可以考慮使用 fetchone()或fetchmany()函數來分批獲取查詢結果
2. fetchone()
fetchone()函數是游標對象(Cursor)的一個方法,用于獲取查詢結果集中的下一行。使用該函數,可以逐行獲取查詢結果集中的數據。每次調用fetchone()函數,它會返回結果集中的下一行數據。當沒有更多的行可用時,它將返回None。
table_name = "interface_test"
db = sqlite3.connect(path)
cursor = db.cursor()
select_sql = '''select* from {} where ENTRY = "{}"'''.format(table_name, "interface")
record_cursor = cursor.execute(select_sql)
#獲取結果中下一行數據
records = record_cursor.fetchone()
db.commit()
cursor.close()
db.close()
3. fetchmany()
fetchmany(size)函數是游標對象(Cursor)的一個方法,用于獲取查詢結果集中的多行數據,最多獲取size行。注意:每次調用 fetchmany()都會從上次獲取數據的地方開始繼續獲取,也就是說,如果先調用了fetchmany(5),然后再調用 fetchmany(5),那么第二次調用將返回查詢結果的第6-10行。如果想要重新從頭開始獲取數據,需要先調用 cursor.scroll(0, mode=‘absolute’) 來重置游標位置。
table_name = "interface_test"
db = sqlite3.connect(path)
cursor = db.cursor()
select_sql = '''select* from {} where ENTRY = "{}"'''.format(table_name, "interface")
record_cursor = cursor.execute(select_sql)
#最多獲取5行
records = record_cursor.fetchmany(5)
db.commit()
cursor.close()
db.close()
5> delete
import sqlite3
table_name = "interface_test"
db = sqlite3.connect(path)
cursor = db.cursor()
delete_sql = '''delete from {} where ENTRY = "{}"'''.format(table_name, "interface")
record_cursor = cursor.execute(delete_sql)
db.commit()
cursor.close()
db.close()
6> other step
step | detail |
---|---|
ALTER TABLE | 修改表格結構 |
DROP TABLE | 刪除表格 |
CREATE INDEX | 創建索引 |
DROP INDEX | 刪除索引 |
SELECT DISTINCT | 選擇唯一記錄 |
ORDER BY | 排序查詢結果 |
GROUP BY | 按列分組 |
HAVING | 過濾分組后的數據 |
LIMIT- | 限制查詢結果數量 |
JOIN | 連接表格 |
LEFT JOIN | 左連接 |
RIGHT JOIN | 右連接 |
FULL OUTER JOIN | 全外連接 |
UNION | 合并兩個查詢結果 |
EXCEPT | 排除兩個查詢結果中的重復行 |
四: Mysql
1> Mysql知識詳解
https://blog.csdn.net/weixin_42914706/article/details/111658640