python之sqlite3

#!/usr/bin/python


import sqlite3
1   sqlite3.connect(database [,timeout ,other optional arguments])
該 API 打開(kāi)一個(gè)到 SQLite 數(shù)據(jù)庫(kù)文件 database 的鏈接。您可以使用 ":memory:" 來(lái)在 RAM 中打開(kāi)一個(gè)到 database 的數(shù)據(jù)庫(kù)連接,而不是在磁盤(pán)上打開(kāi)。如果數(shù)據(jù)庫(kù)成功打開(kāi),則返回一個(gè)連接對(duì)象。
當(dāng)一個(gè)數(shù)據(jù)庫(kù)被多個(gè)連接訪問(wèn),且其中一個(gè)修改了數(shù)據(jù)庫(kù),此時(shí) SQLite 數(shù)據(jù)庫(kù)被鎖定,直到事務(wù)提交。timeout 參數(shù)表示連接等待鎖定的持續(xù)時(shí)間,直到發(fā)生異常斷開(kāi)連接。timeout 參數(shù)默認(rèn)是 5.0(5 秒)。
如果給定的數(shù)據(jù)庫(kù)名稱 filename 不存在,則該調(diào)用將創(chuàng)建一個(gè)數(shù)據(jù)庫(kù)。如果您不想在當(dāng)前目錄中創(chuàng)建數(shù)據(jù)庫(kù),那么您可以指定帶有路徑的文件名,這樣您就能在任意地方創(chuàng)建數(shù)據(jù)庫(kù)。
2   connection.cursor([cursorClass])
該例程創(chuàng)建一個(gè) cursor,將在 Python 數(shù)據(jù)庫(kù)編程中用到。該方法接受一個(gè)單一的可選的參數(shù) cursorClass。如果提供了該參數(shù),則它必須是一個(gè)擴(kuò)展自 sqlite3.Cursor 的自定義的 cursor 類。
3   cursor.execute(sql [, optional parameters])
該例程執(zhí)行一個(gè) SQL 語(yǔ)句。該 SQL 語(yǔ)句可以被參數(shù)化(即使用占位符代替 SQL 文本)。sqlite3 模塊支持兩種類型的占位符:?jiǎn)柼?hào)和命名占位符(命名樣式)。
例如:cursor.execute("insert into people values (?, ?)", (who, age))
4   connection.execute(sql [, optional parameters])
該例程是上面執(zhí)行的由光標(biāo)(cursor)對(duì)象提供的方法的快捷方式,它通過(guò)調(diào)用光標(biāo)(cursor)方法創(chuàng)建了一個(gè)中間的光標(biāo)對(duì)象,然后通過(guò)給定的參數(shù)調(diào)用光標(biāo)的 execute 方法。
5   cursor.executemany(sql, seq_of_parameters)
該例程對(duì) seq_of_parameters 中的所有參數(shù)或映射執(zhí)行一個(gè) SQL 命令。
6   connection.executemany(sql[, parameters])
該例程是一個(gè)由調(diào)用光標(biāo)(cursor)方法創(chuàng)建的中間的光標(biāo)對(duì)象的快捷方式,然后通過(guò)給定的參數(shù)調(diào)用光標(biāo)的 executemany 方法。
7   cursor.executescript(sql_script)
該例程一旦接收到腳本,會(huì)執(zhí)行多個(gè) SQL 語(yǔ)句。它首先執(zhí)行 COMMIT 語(yǔ)句,然后執(zhí)行作為參數(shù)傳入的 SQL 腳本。所有的 SQL 語(yǔ)句應(yīng)該用分號(hào)(;)分隔。
8   connection.executescript(sql_script)
該例程是一個(gè)由調(diào)用光標(biāo)(cursor)方法創(chuàng)建的中間的光標(biāo)對(duì)象的快捷方式,然后通過(guò)給定的參數(shù)調(diào)用光標(biāo)的 executescript 方法。
9   connection.total_changes()
該例程返回自數(shù)據(jù)庫(kù)連接打開(kāi)以來(lái)被修改、插入或刪除的數(shù)據(jù)庫(kù)總行數(shù)。
10  connection.commit()
該方法提交當(dāng)前的事務(wù)。如果您未調(diào)用該方法,那么自您上一次調(diào)用 commit() 以來(lái)所做的任何動(dòng)作對(duì)其他數(shù)據(jù)庫(kù)連接來(lái)說(shuō)是不可見(jiàn)的。
11  connection.rollback()
該方法回滾自上一次調(diào)用 commit() 以來(lái)對(duì)數(shù)據(jù)庫(kù)所做的更改。
12  connection.close()
該方法關(guān)閉數(shù)據(jù)庫(kù)連接。請(qǐng)注意,這不會(huì)自動(dòng)調(diào)用 commit()。如果您之前未調(diào)用 commit() 方法,就直接關(guān)閉數(shù)據(jù)庫(kù)連接,您所做的所有更改將全部丟失!
13  cursor.fetchone()
該方法獲取查詢結(jié)果集中的下一行,返回一個(gè)單一的序列,當(dāng)沒(méi)有更多可用的數(shù)據(jù)時(shí),則返回 None。
14  cursor.fetchmany([size=cursor.arraysize])
該方法獲取查詢結(jié)果集中的下一行組,返回一個(gè)列表。當(dāng)沒(méi)有更多的可用的行時(shí),則返回一個(gè)空的列表。該方法嘗試獲取由 size 參數(shù)指定的盡可能多的行。
15  cursor.fetchall()
該例程獲取查詢結(jié)果集中所有(剩余)的行,返回一個(gè)列表。當(dāng)沒(méi)有可用的行時(shí),則返回一個(gè)空的列表。

#創(chuàng)建的數(shù)據(jù)庫(kù)中創(chuàng)建一個(gè)表
conn = sqlite3.connect('test.db')
print ("Opened database successfully")
c = conn.cursor()
c.execute('''CREATE TABLE COMPANY
       (ID INT PRIMARY KEY     NOT NULL,
       NAME           TEXT    NOT NULL,
       AGE            INT     NOT NULL,
       ADDRESS        CHAR(50),
       SALARY         REAL);''')
print ("Table created successfully")
conn.commit()
conn.close()

#insert操作
conn = sqlite3.connect('test.db')  #連接庫(kù)
c = conn.cursor()
print "Opened database successfully";

c.execute("INSERT INTO COMPANY (ID,NAME,AGE,ADDRESS,SALARY) \
      VALUES (1, 'Paul', 32, 'California', 20000.00 )");

c.execute("INSERT INTO COMPANY (ID,NAME,AGE,ADDRESS,SALARY) \
      VALUES (2, 'Allen', 25, 'Texas', 15000.00 )");

c.execute("INSERT INTO COMPANY (ID,NAME,AGE,ADDRESS,SALARY) \
      VALUES (3, 'Teddy', 23, 'Norway', 20000.00 )");

c.execute("INSERT INTO COMPANY (ID,NAME,AGE,ADDRESS,SALARY) \
      VALUES (4, 'Mark', 25, 'Rich-Mond ', 65000.00 )");

conn.commit()
print "Records created successfully";
conn.close()

#select操作
conn = sqlite3.connect('test.db')
c = conn.cursor()
print "Opened database successfully";

cursor = c.execute("SELECT id, name, address, salary  from COMPANY")
for row in cursor:
   print "ID = ", row[0]
   print "NAME = ", row[1]
   print "ADDRESS = ", row[2]
   print "SALARY = ", row[3], "\n"

print "Operation done successfully";
conn.close()

#update操作
conn = sqlite3.connect('test.db')
c = conn.cursor()
print "Opened database successfully";

c.execute("UPDATE COMPANY set SALARY = 25000.00 where ID=1")
conn.commit()
print "Total number of rows updated :", conn.total_changes

cursor = conn.execute("SELECT id, name, address, salary  from COMPANY")
for row in cursor:
   print "ID = ", row[0]
   print "NAME = ", row[1]
   print "ADDRESS = ", row[2]
   print "SALARY = ", row[3], "\n"

print "Operation done successfully";
conn.close()

#刪除操作
conn = sqlite3.connect('test.db')
c = conn.cursor()
print "Opened database successfully";

c.execute("DELETE from COMPANY where ID=2;")
conn.commit()
print "Total number of rows deleted :", conn.total_changes

cursor = conn.execute("SELECT id, name, address, salary  from COMPANY")
for row in cursor:
   print "ID = ", row[0]
   print "NAME = ", row[1]
   print "ADDRESS = ", row[2]
   print "SALARY = ", row[3], "\n"

print "Operation done successfully";
conn.close()
最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請(qǐng)聯(lián)系作者
平臺(tái)聲明:文章內(nèi)容(如有圖片或視頻亦包括在內(nèi))由作者上傳并發(fā)布,文章內(nèi)容僅代表作者本人觀點(diǎn),簡(jiǎn)書(shū)系信息發(fā)布平臺(tái),僅提供信息存儲(chǔ)服務(wù)。

推薦閱讀更多精彩內(nèi)容