Python連接配接SQL Server資料庫 - pymssql使用基礎
下面是pymssql裡參數使用說明,如下:
pymssqlCnx類(用于連接配接Mssql資料庫)
pymssql.connect()來初始化連接配接類,它允許如下的參數。
dsn:連接配接字元串,主要用于與之前版本的pymssql相容
user:使用者名
password:密碼
trusted:布爾值,指定是否使用windows身份認證登陸
host :主機名
database:資料庫
timeout:查詢逾時
login_timeout:登陸逾時
charset:資料庫的字元集
as_dict:布爾值,指定傳回值是字典還是元組
max_conn:最大連接配接數
2. Method
autocommit(status)
布爾值,訓示是否自動送出事務,預設的狀态是關閉的,如果打開,你必須調用commit()方法來送出事務。
close()
關閉連接配接
cursor()
傳回遊标對象,用于查詢和傳回資料
commit()
送出事務。
rollback()
復原事務
pymssqlCursor類
用于從資料庫查詢和傳回資料
rowcount
傳回最後操作影響的行數。
connection
傳回建立遊标的連接配接對象
lastrowid
傳回插入的最後一行
rownumber
傳回目前資料集中的遊标(通過索引)
3. 遊标方法
關閉遊标
execute(operation)
執行操作
execute(operation, params)
執行操作,可以提供參數進行相應操作
executemany(operation, params_seq)
執行操作,Params_seq為元組
fetchone()
在結果中讀取下一行
fetchmany(size=None)
在結果中讀取指定數目的行
fetchall()
讀取所有行
nextset()
遊标跳轉到下一個資料集
<code>#coding=utf-8 </code>
<code>#!/usr/bin/env python</code>
<code>#-------------------------------------------------------------------------------</code>
<code># Name: pymssqlTest.py</code>
<code># Purpose: 測試 pymssql庫,該庫到這裡下載下傳:http://www.lfd.uci.edu/~gohlke/pythonlibs/#pymssql</code>
<code>#</code>
<code># Author: scott</code>
<code># Created: 04/02/2012</code>
<code>import</code> <code>pymssql</code>
<code>class</code> <code>MSSQL:</code>
<code> </code><code>"""</code>
<code> </code><code>對pymssql的簡單封裝</code>
<code> </code><code>pymssql庫,該庫到這裡下載下傳:http://www.lfd.uci.edu/~gohlke/pythonlibs/#pymssql</code>
<code> </code><code>使用該庫時,需要在Sql Server Configuration Manager裡面将TCP/IP協定開啟</code>
<code> </code><code>用法:</code>
<code> </code><code>def</code> <code>__init__(</code><code>self</code><code>,host,user,pwd,db):</code>
<code> </code><code>self</code><code>.host </code><code>=</code> <code>host</code>
<code> </code><code>self</code><code>.user </code><code>=</code> <code>user</code>
<code> </code><code>self</code><code>.pwd </code><code>=</code> <code>pwd</code>
<code> </code><code>self</code><code>.db </code><code>=</code> <code>db</code>
<code> </code><code>def</code> <code>__GetConnect(</code><code>self</code><code>):</code>
<code> </code><code>"""</code>
<code> </code><code>得到連接配接資訊</code>
<code> </code><code>傳回: conn.cursor()</code>
<code> </code><code>if</code> <code>not</code> <code>self</code><code>.db:</code>
<code> </code><code>raise</code><code>(NameError,</code><code>"沒有設定資料庫資訊"</code><code>)</code>
<code> </code><code>self</code><code>.conn </code><code>=</code> <code>pymssql.connect(host</code><code>=</code><code>self</code><code>.host,user</code><code>=</code><code>self</code><code>.user,password</code><code>=</code><code>self</code><code>.pwd,database</code><code>=</code><code>self</code><code>.db,charset</code><code>=</code><code>"utf8"</code><code>)</code>
<code> </code><code>cur </code><code>=</code> <code>self</code><code>.conn.cursor()</code>
<code> </code><code>if</code> <code>not</code> <code>cur:</code>
<code> </code><code>raise</code><code>(NameError,</code><code>"連接配接資料庫失敗"</code><code>)</code>
<code> </code><code>else</code><code>:</code>
<code> </code><code>return</code> <code>cur</code>
<code> </code><code>def</code> <code>ExecQuery(</code><code>self</code><code>,sql):</code>
<code> </code><code>執行查詢語句</code>
<code> </code><code>傳回的是一個包含tuple的list,list的元素是記錄行,tuple的元素是每行記錄的字段</code>
<code> </code><code>調用示例:</code>
<code> </code><code>ms = MSSQL(host="localhost",user="sa",pwd="123456",db="PythonWeiboStatistics")</code>
<code> </code><code>resList = ms.ExecQuery("SELECT id,NickName FROM WeiBoUser")</code>
<code> </code><code>for (id,NickName) in resList:</code>
<code> </code><code>print str(id),NickName</code>
<code> </code><code>cur </code><code>=</code> <code>self</code><code>.__GetConnect()</code>
<code> </code><code>cur.execute(sql)</code>
<code> </code><code>resList </code><code>=</code> <code>cur.fetchall()</code>
<code> </code><code>#查詢完畢後必須關閉連接配接</code>
<code> </code><code>self</code><code>.conn.close()</code>
<code> </code><code>return</code> <code>resList</code>
<code> </code><code>def</code> <code>ExecNonQuery(</code><code>self</code><code>,sql):</code>
<code> </code><code>執行非查詢語句</code>
<code> </code><code>cur = self.__GetConnect()</code>
<code> </code><code>cur.execute(sql)</code>
<code> </code><code>self.conn.commit()</code>
<code> </code><code>self.conn.close()</code>
<code> </code><code>self</code><code>.conn.commit()</code>
<code>def</code> <code>main():</code>
<code>## ms = MSSQL(host="localhost",user="sa",pwd="123456",db="PythonWeiboStatistics")</code>
<code>## #傳回的是一個包含tuple的list,list的元素是記錄行,tuple的元素是每行記錄的字段</code>
<code>## ms.ExecNonQuery("insert into WeiBoUser values('2','3')")</code>
<code> </code><code>ms </code><code>=</code> <code>MSSQL(host</code><code>=</code><code>"localhost"</code><code>,user</code><code>=</code><code>"sa"</code><code>,pwd</code><code>=</code><code>"123456"</code><code>,db</code><code>=</code><code>"PythonWeiboStatistics"</code><code>)</code>
<code> </code><code>resList </code><code>=</code> <code>ms.ExecQuery(</code><code>"SELECT id,weibocontent FROM WeiBo"</code><code>)</code>
<code> </code><code>for</code> <code>(</code><code>id</code><code>,weibocontent) </code><code>in</code> <code>resList:</code>
<code> </code><code>print</code> <code>str</code><code>(weibocontent).decode(</code><code>"utf8"</code><code>)</code>
<code>if</code> <code>__name__ </code><code>=</code><code>=</code> <code>'__main__'</code><code>:</code>
<code> </code><code>main()</code>
注意事項:
使用pymssql進行中文操作時候可能會出現中文亂碼,我解決的方案是:
檔案頭加上 #coding=utf8
sql語句中有中文的時候進行encode
insertSql = "insert into WeiBo([UserId],[WeiBoContent],[PublishDate]) values(1,'測試','2012/2/1')".encode("utf8")
連接配接的時候加入charset設定資訊
pymssql.connect(host=self.host,user=self.user,password=self.pwd,database=self.db,charset="utf8")