1. 程式人生 > >python3.5連結SQL2017,讀取資料庫中的資料

python3.5連結SQL2017,讀取資料庫中的資料

之前寫了一個小程式,使用的資料是從資料庫中下載出來的,但是現在想要讓它直接連結上資料庫中,可以直接從資料庫中讀取資料,所以研究了一下python和sql之間的連結。具體如下:
使用的庫為pyodbc
安裝過程自不必多說,和其他庫的安裝一樣
安裝完成後測試過程,在網上找到了好多資料

>>> import pyodbc

>>>cnxn = pyodbc.connect('DRIVER={SQL Server};SERVER=192.168.1.100\\sql;DATABASE=testDB;UID=sa;PWD=myPassword')

>>>cursor = cnxn.cursor()

>>>cursor.execute("select * from Tb"
)

下面一個一個說一下什麼意思及自己要使用時應注意什麼
第一句import pyodbc匯入pyodbc庫
第二句
cnxn=pyodbc.connect('DRIVER={SQL Server};SERVER=192.168.1.100\\sql;DATABASE=testDB;UID=sa;PWD=myPassword')
我在這句吃了很多虧,導致了許多莫名其妙的錯誤,下面我們就詳細剖析下這條語句,首先pyodbc.connect()是連結函式,它傳入一個string型別引數,這個引數會指定連結資料庫的型別DRIVER,資料庫的名稱DATABASE,資料庫所屬伺服器SERVER,使用者名稱UID

,密碼PWD,這些東西對於那些對資料庫瞭解的比較好的童鞋來說應該不成問題,但對我這個半吊子來說這個就是一個大問題,下面就一個個地去找一下這些東西在哪,首先我先說下我的資料庫是SQL2017,我使用的sql manage是Microsoft SQL Server Management Studio 17,在安裝它時會自動安裝一個Native Client,大家可以去控制面板->程式->程式與功能 中搜索Native Client,確認下自己的版本,然後對應下表,將對應的值輸入連結資料庫的型別DRIVER後邊花括號裡;

  • {SQL Server} ————————- released with SQL Server 2000
  • {SQL Native Client} —————– released with SQL Server 2005 (also known as
    version 9.0)
  • {SQL Server Native Client 10.0} - released with SQL Server 2008
  • {SQL Server Native Client 11.0} - released with SQL Server 2012

    第二個引數資料庫所屬伺服器SERVER的值我查閱的資料大多都是localhost,但是對於我的資料庫卻老是連結不上,所以我只好開啟Microsoft SQL Server Management Studio 17,連線上資料庫,右鍵屬性
    圖1 資料庫屬性
    紅圈中的值才是伺服器的值,也就是SERVER的值
    第三個引數資料庫的名稱DATABASE自不必多說,下圖中紅圈的值就是資料庫的名稱
    圖2 資料庫名稱
    在確定第四個引數和第五個引數的值之前,先看下資料庫是否可以啟用伺服器代理賬戶,還是第一個引數一樣的視窗右鍵->引數->安全性,要確保啟用伺服器代理賬戶項是可以啟動的,如下圖
    圖3 啟用伺服器代理賬戶
    然後找到物件資源管理器中的資料庫伺服器(第一個引數也在這)一項中的安全性->登入名
    圖4 登入名
    右鍵sa->屬性->安全性,輸入密碼,確定。這個使用者sa和密碼就是第四和第五個引數。
    圖5 密碼
    這些就是第二條語句中的引數。
    第三條語句是建立cursor,沒什麼可說的。
    第四條語句就是對資料庫中資料進行操作了,其中的sql語言要寫在execute()函式中,並用雙引號括起來
    但是這條語句輸出的卻是

>>> cursor.execute("select name from Database.data")
<pyodbc.Cursor object at 0x000001C421FAFAF8>

要想將它顯示為正常的形式還需要呼叫其它函式fetchone()或者fetchall()。

>>> cursor.fetchall()
[('1haha', ), ('2dada', ), ('3chuachua', ), ('4xixi', ), ('5hehe', ), ('6qieqie', ), ('7lele', ), ('8lala', )]

成功!
如果是對資料庫中資料進行增刪修改等其它操作時,還要記得用函式commit()對操作提交一下。

>>> cursor.execute("delect  from Database.data where name = '4xixi' ")
>>> cnxn.commit()