91超碰碰碰碰久久久久久综合_超碰av人澡人澡人澡人澡人掠_国产黄大片在线观看画质优化_txt小说免费全本

溫馨提示×

溫馨提示×

您好,登錄后才能下訂單哦!

密碼登錄×
登錄注冊×
其他方式登錄
點擊 登錄注冊 即表示同意《億速云用戶服務條款》

pyodbc連接MSSQL執行SQL語句

發布時間:2020-07-20 21:25:03 來源:網絡 閱讀:410 作者:AlunE 欄目:編程語言

使用django連接SQL Server,如果要連接多個數據庫,則使用pyodbc來連接。

pyodbc,運行查詢的 SQL,非常簡單:

import pyodbc

connection = pyodbc.connect('DRIVER={SQL Server Native Client 10.0};SERVER=127.0.0.1;DATABASE=DB_name;UID=User_Name;PWD=PassWord')
curs = connection.execute('select * from table')
#curs.fetchone()
curs.fetchall()

pyodbc的基本用法:

  1. 先導入:from pyodbc import connect;

  2. 產生連接實例:Conn = connect(DBCONNECTSTR);

  3. 產生游標:cur = Conn.cursor();

  4. 執行游標命令:cur.execute()、cur.commit()、cur.rollback()之類;

  5. 關閉游標:cur.close();

  6. 關閉連接實例:Conn.close()。

以上6個步驟都是必要的。

如果僅僅是查詢,可以直接使用實例直接運行excute命令就可以了,可以不創建游標,那么3、4、5步都可以省略。

上面這些內容網上一大堆教程,我就不多說了。(DRY=Donot Repeat Yourself)

不過網上很多文章都是誤導,例如:Python連接數據庫-pyodbc

里面說運行存儲過程使用 callproc() 方法。

提供 connection 和 cursor 的方法列表:


>>> dir(Conn)

['__class__', '__delattr__', '__doc__', '__enter__', '__exit__', '__format__', '__getattribute__', '__hash__', '__init__', '__new__', '__reduce__', '__reduce_ex__', '__repr__', '__setattr__', '__sizeof__', '__str__', '__subclasshook__', 'add_output_converter', 'autocommit', 'clear_output_converters', 'close', 'commit', 'cursor', 'execute', 'getinfo',  'rollback', 'searchescape', 'timeout']

>>> dir(cur)

['__class__', '__delattr__', '__doc__', '__enter__', '__exit__', '__format__', '__getattribute__', '__hash__', '__init__', '__iter__', '__new__', '__reduce__','__reduce_ex__', '__repr__', '__setattr__', '__sizeof__', '__str__', '__subclasshook__', 'arraysize', 'close', 'columns', 'commit', 'connection',  'description', 'execute',  'executemany', 'fetchall', 'fetchmany', 'fetchone', 'foreignKeys', 'getTypeInfo', 'next', 'nextset', 'noscan', 'primaryKeys', 'procedureColumns', 'procedures', 'rollback', 'rowIdColumns', 'rowVerColumns',  'rowcount', 'setinputsizes', 'setoutputsize', 'skip', 'statistics', 'tables']

執行存儲過程還是使用execute()方法,然后附加 EXEC 當作SQL命令來執行。


try:
    #如果沒有返回數據,存儲過程執行方法
    cur.execute('EXEC P_PROCDUREName param1,param2,%d,%s' %(p1_int,p2_str))
    print cur.rowcount  #可以得到存儲過程影響的行數
    #如果有返回數據集,需要添加 set nocount on, 也可在存儲過程中就加入
    rows = cur.execute('SET NOCOUNT ON; EXEC P_PROCDUREName param1,param2,%d,%s' %(p1_int,p2_str)).fetchall()
    print cur.rowcount,rows   #聰明的你已經知道,行數肯定是沒有的(-1),后面的rows是一個列表,看你的數據是咋樣的了。
    #無論何種方式,都可以最后才commit(其實方式2已經默認包含了commit)
    cur.commit()
except Exception as e:
    print e

注意:如果需要得到返回數據(即存儲過程里面有 Select出來的內容),就需要加上SET NOCOUNT ON;參數,否則可能會出現錯誤:No Results,Previous SQL was not a query

向AI問一下細節

免責聲明:本站發布的內容(圖片、視頻和文字)以原創、轉載和分享為主,文章觀點不代表本網站立場,如果涉及侵權請聯系站長郵箱:is@yisu.com進行舉報,并提供相關證據,一經查實,將立刻刪除涉嫌侵權內容。

AI

晋城| 偏关县| 灵宝市| 鄂尔多斯市| 巴马| 日土县| 台北市| 镇远县| 金塔县| 封丘县| 通榆县| 七台河市| 诏安县| 乌审旗| 镇原县| 阜宁县| 丰台区| 山东| 建始县| 石景山区| 鹤庆县| 扬州市| 巴南区| 西和县| 湟源县| 化隆| 沙坪坝区| 蒙城县| 新余市| 鄂州市| 商丘市| 襄樊市| 余姚市| 三门峡市| 池州市| 余干县| 辽中县| 若羌县| 民县| 南投县| 富阳市|