sqlite使用(python)及性能


python中的使用參照如下API:

 

1 sqlite3.connect(database [,timeout ,other optional arguments])

該 API 打開一個到 SQLite 數據庫文件 database 的鏈接。您可以使用 ":memory:" 來在 RAM 中打開一個到 database 的數據庫連接,而不是在磁盤上打開。如果數據庫成功打開,則返回一個連接對象。

當一個數據庫被多個連接訪問,且其中一個修改了數據庫,此時 SQLite 數據庫被鎖定,直到事務提交。timeout 參數表示連接等待鎖定的持續時間,直到發生異常斷開連接。timeout 參數默認是 5.0(5 秒)。

如果給定的數據庫名稱 filename 不存在,則該調用將創建一個數據庫。如果您不想在當前目錄中創建數據庫,那么您可以指定帶有路徑的文件名,這樣您就能在任意地方創建數據庫。

2 connection.cursor([cursorClass])

該例程創建一個 cursor,將在 Python 數據庫編程中用到。該方法接受一個單一的可選的參數 cursorClass。如果提供了該參數,則它必須是一個擴展自 sqlite3.Cursor 的自定義的 cursor 類。

3 cursor.execute(sql [, optional parameters])

該例程執行一個 SQL 語句。該 SQL 語句可以被參數化(即使用占位符代替 SQL 文本)。sqlite3 模塊支持兩種類型的占位符:問號和命名占位符(命名樣式)。

例如:cursor.execute("insert into people values (?, ?)", (who, age))

4 connection.execute(sql [, optional parameters])

該例程是上面執行的由光標(cursor)對象提供的方法的快捷方式,它通過調用光標(cursor)方法創建了一個中間的光標對象,然后通過給定的參數調用光標的 execute 方法。

5 cursor.executemany(sql, seq_of_parameters)

該例程對 seq_of_parameters 中的所有參數或映射執行一個 SQL 命令。

6 connection.executemany(sql[, parameters])

該例程是一個由調用光標(cursor)方法創建的中間的光標對象的快捷方式,然后通過給定的參數調用光標的 executemany 方法。

7 cursor.executescript(sql_script)

該例程一旦接收到腳本,會執行多個 SQL 語句。它首先執行 COMMIT 語句,然后執行作為參數傳入的 SQL 腳本。所有的 SQL 語句應該用分號 ; 分隔。

8 connection.executescript(sql_script)

該例程是一個由調用光標(cursor)方法創建的中間的光標對象的快捷方式,然后通過給定的參數調用光標的 executescript 方法。

9 connection.total_changes()

該例程返回自數據庫連接打開以來被修改、插入或刪除的數據庫總行數。

10 connection.commit()

該方法提交當前的事務。如果您未調用該方法,那么自您上一次調用 commit() 以來所做的任何動作對其他數據庫連接來說是不可見的。

11 connection.rollback()

該方法回滾自上一次調用 commit() 以來對數據庫所做的更改。

12 connection.close()

該方法關閉數據庫連接。請注意,這不會自動調用 commit()。如果您之前未調用 commit() 方法,就直接關閉數據庫連接,您所做的所有更改將全部丟失!

13 cursor.fetchone()

該方法獲取查詢結果集中的下一行,返回一個單一的序列,當沒有更多可用的數據時,則返回 None。

14 cursor.fetchmany([size=cursor.arraysize])

該方法獲取查詢結果集中的下一行組,返回一個列表。當沒有更多的可用的行時,則返回一個空的列表。該方法嘗試獲取由 size 參數指定的盡可能多的行。

15 cursor.fetchall()

該例程獲取查詢結果集中所有(剩余)的行,返回一個列表。當沒有可用的行時,則返回一個空的列表。

 

寫入例子:

 1 import sqlite3
 2 import os,time
 3 
 4 if os.path.exists('a.db'):
 5     os.remove('a.db')
 6 
 7 conn = sqlite3.connect('a.db')
 8 c = conn.cursor()
 9 conn.executescript("""CREATE TABLE t_process_machine (
10                                   material_name TEXT,
11                                   machine_name TEXT,
12                                   process_name TEXT,
13                                   process_id INTEGER,
14                                   int03 INTEGER,
15                                   process_time INTEGER,
16                                   process_cost REAL,
17                                   campaign_name TEXT,
18                                   dest_pos TEXT,
19                                   int01 INTEGER,
20                                   float01 REAL,
21                                   float02 TEXT,
22                                   float03 TEXT,
23                                   float04 TEXT,
24                                   float05 TEXT,
25                                   float06 TEXT,
26                                   float07 TEXT,
27                                   float08 TEXT,
28                                   float09 TEXT,
29                                   float10 TEXT,
30                                   float11 TEXT,
31                                   float12 TEXT,
32                                   float13 TEXT,
33                                   float14 TEXT,
34                                   float15 TEXT,
35                                   float16 TEXT,
36                                   float17 TEXT,
37                                   float18 TEXT,
38                                   float19 TEXT,
39                                   float20 TEXT,
40                                   int02 INTEGER,
41                                   int04 INTEGER,
42                                   int05 INTEGER,
43                                   int06 TEXT,
44                                   int07 TEXT,
45                                   int08 TEXT,
46                                   int09 TEXT,
47                                   int10 TEXT,
48                                   string01 TEXT,
49                                   string02 TEXT,
50                                   string03 TEXT,
51                                   string04 TEXT,
52                                   string05 TEXT,
53                                   string06 TEXT,
54                                   string07 TEXT,
55                                   string08 TEXT,
56                                   string09 TEXT,
57                                   string10 TEXT,
58                                   string11 TEXT,
59                                   string12 TEXT,
60                                   string13 TEXT,
61                                   string14 TEXT,
62                                   string15 TEXT,
63                                   string16 TEXT,
64                                   string17 TEXT,
65                                   string18 TEXT,
66                                   string19 TEXT,
67                                   string20 TEXT
68                                 );""")
69 
70 # 數據傳遞到操作系統層后不同步
71 c.execute('''PRAGMA synchronous = OFF;''')
72 #conn.execute('PRAGMA synchronous = OFF;')
73 # 關閉日志,因此不進行回滾或原子提交
74 c.execute('''PRAGMA journal_mode = OFF;''')
75 
76 records_data = []
77 for i in range(80000):
78     records_data.append(('asdasd', 'asdad', 'asd', 1, 0, 1, 1.0, '', 'asdadas', 1, 1.0, '1', '', '', '', '', '', '', '', '', '', '', '', '', '', '', '', '', '', '', 9000, 1, 0, '', '', '', '', '', '123123', '0', '1', '0', '123', '123', '123', '', '123', '1001', '123', '', '', '', '', '', '', '', '', ''))
79 
80 start = time.time()
81 c.executemany('''INSERT INTO T_PROCESS_MACHINE(
82                         MATERIAL_NAME, MACHINE_NAME, PROCESS_NAME, PROCESS_ID,
83                         INT03, PROCESS_TIME, PROCESS_COST, CAMPAIGN_NAME, DEST_POS,
84                          INT01, FLOAT01, FLOAT02, FLOAT03, FLOAT04, FLOAT05, FLOAT06, FLOAT07,
85                         FLOAT08, FLOAT09, FLOAT10, FLOAT11, FLOAT12, FLOAT13, FLOAT14, FLOAT15,
86                          FLOAT16, FLOAT17, FLOAT18, FLOAT19, FLOAT20, INT02, INT04, INT05, INT06,
87                           INT07, INT08, INT09, INT10, STRING01, STRING02, STRING03, STRING04, STRING05,
88                         STRING06, STRING07, STRING08, STRING09, STRING10, STRING11, STRING12, STRING13,
89                         STRING14, STRING15, STRING16, STRING17, STRING18, STRING19, STRING20)
90                         values(?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,
91     ?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?)''', records_data);
92 
93 
94 #c.executemany('insert into quotes(code,high,open,low,close,amount,volume) values(?,?,?,?,?,?,?)', records_data)
95 
96 conn.commit()
97 conn.close()
98 print(time.time() -start)

sqlite寫入性能:

性能方面,C++寫入性能較低,python 采用execute_many寫入最快,另外寫入不要寫入None字符,寫入空字符更快。

C++測試結果

 

python寫入測試

 


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM