天天看點

python 使用pymssql連接配接sql server資料庫

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")