pyodbc的簡單使用_第1頁
pyodbc的簡單使用_第2頁
pyodbc的簡單使用_第3頁
pyodbc的簡單使用_第4頁
pyodbc的簡單使用_第5頁
已閱讀5頁,還剩2頁未讀 繼續免費閱讀

下載本文檔

版權說明:本文檔由用戶提供并上傳,收益歸屬內容提供方,若內容存在侵權,請進行舉報或認領

文檔簡介

1、pyodbc的簡單使用1、連接數據庫1)直接連接數據庫和創建一個游標(cursor)12cnxn = pyodbc.connect('DRIVER=SQL Server;SERVER=localhost;DATABASE=testdb;UID=me;PWD=pass')cursor = cnxn.cursor()2)使用DSN連接。通常DSN連接并不需要密碼,還是需要提供一個PSW的關鍵字。12cnxn = pyodbc.connect('DSN=test;PWD=password')cursor = cnxn.cursor()關于連接函數還有更多的選項,可以在

2、pyodbc文檔中的 connect funtion 和 ConnectionStrings查看更多的細節2、數據查詢(SQL語句為 select .from.where)1)所有的SQL語句都用cursor.execute函數運行。如果語句返回行,比如一個查詢語句返回的行,你可以通過游標的fetch函數來獲取數據,這些函數有(fetchone,fetchall,fetchmany).如果返回空行,fetchone函數將返回None,而fetchall和fetchmany將返回一個空列。1234cursor.execute("select user_id, user_name fro

3、m users")row = cursor.fetchone()if row:    print row2)Row這個類,類似于一個元組,但是他們也可以通過字段名進行訪問。1234cursor.execute("select user_id, user_name from users")row = cursor.fetchone()print 'name:', row1          # access by colu

4、mn indexprint 'name:', row.user_name   # or access by name3)如果所有的行都被檢索完,那么fetchone將返回None.12345while 1:    row = cursor.fetchone()    if not row:        break    print 'id:',

5、 row.user_id4)使用fetchall函數時,將返回所有剩下的行,如果是空行,那么將返回一個空列。(如果有很多行,這樣做的話將會占用很多內存。未讀取的行將會被壓縮存放在數據庫引擎中,然后由數據庫服務器分批發送。一次只讀取你需要的行,將會大大節省內存空間)1234cursor.execute("select user_id, user_name from users")rows = cursor.fetchall()for row in rows:    print row.user_id, row.user_name5)如果

6、你打算一次讀完所有數據,那么你可以使用cursor本身。123cursor.execute("select user_id, user_name from users"):for row in cursor:    print row.user_id, row.user_name6)由于cursor.execute返回一個cursor,所以你可以把上面的語句簡化成:12for row in cursor.execute("select user_id, user_name from users"): &#

7、160;  print row.user_id, row.user_name7)有很多SQL語句用單行來寫并不是很方便,所以你也可以使用三引號的字符串來寫:123456cursor.execute("""               select user_id, user_name         

8、0;       from users                where last_logon < '2001-01-01'                  

9、and bill_overdue = 'y'               """)3、參數1)ODBC支持在SQL語句中使用一個問號來作為參數。你可以在SQL語句后面加上值,用來傳遞給SQL語句中的問號。123456cursor.execute("""          &

10、#160;    select user_id, user_name                 from users                where last_logon <   

11、0;               and bill_overdue =                """, '2001-01-01', 'y')這樣做比直接把值寫在SQL語句中更加安全,這是因為每個參數傳遞給數據庫都是單獨進行的。如果

12、你使用不同的參數而運行同樣的SQL語句,這樣做也更加效率。3)python DB API明確說明多參數時可以使用一個序列來傳遞。pyodbc同樣支持:123456cursor.execute("""               select user_id, user_name            

13、;     from users                where last_logon <                   and bill_overdue =   &#

14、160;            """, '2001-01-01', 'y')123cursor.execute("select count(*) as user_count from users where age > ", 21) row = cursor.fetchone() print '%d users' % row.user_count 4、數據插入1

15、)數據插入,把SQL插入語句傳遞給cursor的execute函數,可以伴隨任何需要的參數。12cursor.execute("insert into products(id, name) values ('pyodbc', 'awesome library')")mit()12cursor.execute("insert into products(id, name) values (, )", 'pyodbc', 'awesome library')mit()注意調用mit()函數:你必

16、須調用commit函數,否者你對數據庫的所有操作將會失效!當斷開連接時,所有懸掛的修改將會被重置。這很容易導致出錯,所以你必須記得調用commit函數。5、數據修改和刪除1)數據修改和刪除也是跟上面的操作一樣,把SQL語句傳遞給execute函數。但是我們常常想知道數據修改和刪除時,到底影響了多少條記錄,這個時候你可以使用cursor.rowcount的返回值。123cursor.execute("delete from products where id <> ", 'pyodbc')print cursor.rowcount, 'pr

17、oducts deleted'mit()2)由于execute函數總是返回cursor,所以有時候你也可以看到像這樣的語句:(注意rowcount放在最后面)12deleted = cursor.execute("delete from products where id <> 'pyodbc'").rowcountmit()同樣要注意調用mit()函數6、小竅門1)由于使用單引號的SQL語句是有效的,那么雙引號也同樣是有效的:1deleted = cursor.execute("delete from products whe

18、re id <> 'pyodbc'").rowcount2)假如你使用的是三引號,那么你也可以這樣使用:12345deleted = cursor.execute("""                         delete    &

19、#160;                      from products                          where id <> 'pyodbc'                         "

溫馨提示

  • 1. 本站所有資源如無特殊說明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請下載最新的WinRAR軟件解壓。
  • 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請聯系上傳者。文件的所有權益歸上傳用戶所有。
  • 3. 本站RAR壓縮包中若帶圖紙,網頁內容里面會有圖紙預覽,若沒有圖紙預覽就沒有圖紙。
  • 4. 未經權益所有人同意不得將文件中的內容挪作商業或盈利用途。
  • 5. 人人文庫網僅提供信息存儲空間,僅對用戶上傳內容的表現方式做保護處理,對用戶上傳分享的文檔內容本身不做任何修改或編輯,并不能對任何下載內容負責。
  • 6. 下載文件中如有侵權或不適當內容,請與我們聯系,我們立即糾正。
  • 7. 本站不保證下載資源的準確性、安全性和完整性, 同時也不承擔用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。

評論

0/150

提交評論