Windowsx64位安裝pymssql並完成與數據庫鏈接


常流程只需要打開下載並按照常規方法安裝mssql包即可在程序中import pymssql,不過安裝mssql確實有些小麻煩。

從開始安裝就開始出現了各種異常錯誤

首先出現sqlfront.h文件找不多,查了很多資料也沒有看明白是什么個原因。。

最終在這里仔細閱讀了一下文檔,開始一步步嘗試往下解決

大致的意思是講其實pymssql是依賴於一個叫FreeTDS的東西,查了一下它是一個C語言鏈接sqlserve的公共開源庫。

在windows下安裝接下來參照這篇文檔說明開始准備下載freetds-v0.95.95-win-x86-vs2008.zip

當然這里可以根據自己的Python版本去下載對應的包,下載地址

 

下載完后發現里邊的文件目錄大致是這樣的

打開include一看,原來我需要的文件都在這個文件里,然后就把這個的所有文件bin+include+lib+lib-nossl全部copy到python的安裝目錄再試一下沒有原來的錯誤了

新的問題又出現了,無法打開輸入文件“db-lib.lib”

 這里就比較蛋疼了,單仔細閱讀以下,翻到文章結尾的安裝包

既然用pymssql-2.1.3.tar.gz不能正確安裝,就換一種方式,於是下載了2中的whl文件

下載完后將 pymssql-2.1.3-cp27-cp27m-win_amd64.whl放在安裝文件目錄中,運行CMD到指定文件目錄

這時出現以下錯誤:

Requirement already satisfied: pymssql==2.1.3 from file:///C:/Python/pymssql-2.1
.3-cp27-cp27m-win_amd64.whl in c:\python2.7.11\lib\site-packages

錯誤提示很明顯示因為之前安裝時已經將文件放在了c:\python2.7.11\lib\site-packages文件中,因此在site-packages中刪掉pymssql的安裝,再試一次順利完成!

最后為了驗證以下,在文件中鏈接當前數據庫看一下是否可以連通。。

#coding:utf-8
import urllib2
import os
import sys
reload(sys)
sys.setdefaultencoding("utf-8")
import urllib
import string
from bs4 import BeautifulSoup #導入解析html源碼模塊
import pymssql #導入mssql數據庫連接包
conn=pymssql.connect(host='127.0.0.1',user='testdb',password='testdb@123',database='IM_CRM')
cur=conn.cursor()
cur.execute('select top 5 * from [dbo].[crm_Cart]')
 #如果update/delete/insert記得要conn.commit()
 #否則數據庫事務無法提交
print (cur.fetchall())
cur.close()
conn.close()

打印結果看一下

對比以下數據庫

仔細觀察沒有問題,用這種方式一樣可以鏈接數據庫,到這里就開始后面的詳細業務編寫吧。

 

 

 

 

最后再附一個抓取的py文件吧

#coding:utf-8
import urllib2
import os
import sys
reload(sys)
sys.setdefaultencoding("utf-8")
import time
import datetime
import urllib
import string
from bs4 import BeautifulSoup #導入解析html源碼模塊
import pymssql #導入mssql數據庫連接包

print "開始時間:"+datetime.datetime.now().strftime('%Y-%m-%d %H:%M:%S.%f')

#抓取頁面邏輯
for num in range(101,200+1):#頁數控制
 url = "http://xxx/Suppliers.asp?page="+str(num)+"&hdivision=" #循環ip地址
 header = {
            "User-Agent":"Mozilla/5.0 (Windows NT 10.0; WOW64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/49.0.2623.22 Safari/537.36 SE 2.X MetaSr 1.0",
            "Referer":"http://xxx/suppliers.asp"
        }
 req = urllib2.Request(url,data=None,headers=header)
 req.encding="utf-8"
 ope = urllib2.urlopen(req)
 #請求創建完成
 soup = BeautifulSoup(ope.read(), 'html.parser')

 COMCount = 0
 tableTrList=soup.select("table tr")
 tableTrList.remove(tableTrList[0])
 for trtag in tableTrList:
     COMCount+=1
     companyname= trtag.contents[1].a.string # 公司名稱
     area=trtag.contents[3].string # 地區
     tel=trtag.contents[5].string # 電話
     web = trtag.contents[7].a.string  # 網址
     prolisturl=trtag.contents[11].a['href']#產品列表鏈接
     companyID=prolisturl[20:] #獲取公司對應ID
     print  str(COMCount)+'獲取產品列表鏈接:http://www.xxx/'+prolisturl
     if companyname is None:
         companyname=""
     if area is None:
         area = ""
     if tel is None:
         tel = ""
     if web is None:
         web = ""

     print "公司名稱:"+companyname
     print "地區:" + area
     print "電話:" + tel
     print "網址:" + web
     print str(COMCount)+"公司信息開始寫入:"+"INSERT INTO [dbo].[Company](BioID,ComName,Area,Tel,WebSite,InDate) VALUES ('"+companyID+"','"+companyname+"','"+area+"','"+tel+"','"+web+"','"+datetime.datetime.now().strftime('%Y-%m-%d %H:%M:%S.%f')+"') "

     #寫入企業信息起
     conn = pymssql.connect(host='GAOMS-PC\SQLEXPRESS', user='test', password='abc123!@#', database='BIO-EQUI')
     cur = conn.cursor()
     cur.execute("INSERT INTO [dbo].[Company](BioID,ComName,Area,Tel,WebSite,InDate) VALUES ('"+companyID+"','"+companyname+"','"+area+"','"+tel+"','"+web+"','"+datetime.datetime.now().strftime('%Y-%m-%d %H:%M:%S.%f')+"') ")
     conn.commit()
     cur.close()
     conn.close()
     #寫入企業信息止
     print str(COMCount)+"公司信息寫入完成"




     #驗證公司下是否有產品
     urlpropage="http://xxx/otherproduct.asp?id="+companyID
     #urlpropage="http://xxx/otherproduct.asp?id=64356"#測試某一產品地址排查異常使用
     headerpropage = {
         "User-Agent": "Mozilla/5.0 (Windows NT 10.0; WOW64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/49.0.2623.22 Safari/537.36 SE 2.X MetaSr 1.0",
         "Referer": "" + url
     }
     reqpropage = urllib2.Request(urlpropage, data=None, headers=headerpropage)
     reqpropage.encding = "utf-8"
     opepropage = urllib2.urlopen(urlpropage)
     souppropage = BeautifulSoup(opepropage.read(), 'html.parser')
     tableTrPageCount = souppropage.select("table tr")
     ProPageCount='0'
     if (len(tableTrPageCount) > 0):
         try:
             ProPageCount=str(souppropage.select("form p")[0])
             dijiye=ProPageCount[ProPageCount.index(""):].replace("\r\n"," ").replace("</p>"," ").strip()
             ProPageCount=dijiye[dijiye.index("/")+1:].replace(""," ").strip()
             print "產品"+str(COMCount)+"下包含"+ProPageCount+"頁產品__________________________________"
             PROCount = 0
             # 循環獲取產品列表內容

             if (int(ProPageCount)>2):
                 ProPageCount=2 #如果產品頁數過多只去前2頁

             for numpro in range(1, int(ProPageCount)+1):
                 urlprolist = "http://www.bio-equip.com/" + str(prolisturl) + "&page=" + str(numpro) + "&hdivision="  # 循環鏈接
                 headerprolist = {
                     "User-Agent": "Mozilla/5.0 (Windows NT 10.0; WOW64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/49.0.2623.22 Safari/537.36 SE 2.X MetaSr 1.0",
                     "Referer": "" + url
                 }
                 reqprolist = urllib2.Request(urlprolist, data=None, headers=headerprolist)
                 reqprolist.encding = "utf-8"
                 opeprolist = urllib2.urlopen(reqprolist)
                 soupprolist = BeautifulSoup(opeprolist.read(), 'html.parser')
                 tableTrListCount = soupprolist.select("table tr")
                 #print tableTrListCount 打印獲取的表格數據
                 tableTrListCount.remove(tableTrListCount[0])
                 for trtagPro in tableTrListCount:
                     PROCount += 1
                     proname = trtagPro.contents[0].a.string  # 產品名稱
                     proPlace = trtagPro.contents[2].string  # 產品產地
                     ProType = trtagPro.contents[4].string  # 產品型號
                     if proPlace is None:
                         proPlace = ""
                     if area is None:
                         area = ""
                     if ProType is None:
                         ProType = ""
                     print "產品名稱:" + proPlace
                     print "產品產地:" + area
                     print "產品型號:" + ProType
                     print "獲取" + str(COMCount) + "下產品:" + str(PROCount) + proname + "" + str(numpro) + ""

                     print str(COMCount)+"_"+str(PROCount)+"產品寫入開始"+"INSERT INTO [dbo].[Product](ComID,ProName,ProPlace,ProType) VALUES ('" + companyID + "','" + proname + "','" + proPlace + "','" + ProType + "') "

                     # 寫入企業產品信息起
                     connpro = pymssql.connect(host='GAOMS-PC\SQLEXPRESS', user='test', password='abc123!@#',database='BIO-EQUI')
                     curpro = connpro.cursor()
                     curpro.execute("INSERT INTO [dbo].[Product](ComID,ProName,ProPlace,ProType,InDate) VALUES ('" + companyID + "','" + proname + "','" + proPlace + "','" + ProType + "','"+datetime.datetime.now().strftime('%Y-%m-%d %H:%M:%S.%f')+"') ")
                     connpro.commit()
                     curpro.close()
                     connpro.close()
                     # 寫入企業產品信息止

         except  Exception:
             pass
print "結束時間:" + time.strftime('%Y-%m-%d %H:%M:%S', time.localtime(time.time()))
View Code

 


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM