Python使用SQL Server数据库
截至2019年12月: pyodbc正在积极开发中,由 Microsoft 正式支持(当使用 Microsoft 的 ODBC 驱动程序的当前版本时,用于 SQL Server),并且有几个 Microsoft 员工提供与访问 SQL Server 和 Azure SQL 相关的错误修复和新功能。
pypyodbc在pyodbc之后出现,但不是"Pyodbc的较新版本",它是一种替代的纯Python实现。自 2017 年 1 月以来,它一直没有正式发布。
pymssql失去了很多势头,并已停产。
安装SQL Server数据库模块
pip install pymssql
使用
导入模块
import pymysql
python 操作mssql代码
def dblog(keyword, url, pageNum, posNum):
conn = pymssql.connect(host="127.0.0.1",
database="TestDB",
user="sa",
password="123456")
cur = conn.cursor()
sql = "insert into data_log(logTime,keyword,url,pageNum,posNum,ip,port,useragent,windowsSize,cookie) values(getdate(),'%(keyword)s','%(url)s',%(pageNum)d,%(posNum)d,'%(ip)s','%(port)s','%(useragent)s','%(windowsSize)s','%(cookie)s')" % {
"keyword": keyword,
"url": url,
"pageNum": pageNum,
"posNum": posNum,
"ip": ip,
"port": port,
"useragent": user_agent,
"windowsSize": ','.join(str(a) for a in window_size),
"cookie": ''
}
cur.execute(sql)
conn.commit()
conn.close()
打包EXE无法运行问题
使用了pymssql包的py文件打包成exe,打包命令
pyinstaller -F run.py
报错信息
生成exe后运行报错
如果直接运行exe程序,cmd窗口会一闪而过,若想看详细信息,从cmd命令 运行exe程序,这样就会保留窗口
原因
Python程序打包经常会用到Pyinstaller这个工具,打包成一个独立的exe程序用于发布,这样就不用在目标机上部署Python的一整套环境,但笔者在测试的时候发现,写一个测试程序,打包后无故障运行,但一旦用了pymssql这个包,也就是要连SQL server的时候,就出问题了,打包可以成功,但程序就是无法运行,会报错,ImportError: No module named _mssql,可以定位到问题就出在pymssql这个包上,注释掉数据库连接就OK了,在百度了一番之后,找到一个解决方案:
大意就是打包的时候,打包程序无法判断动态调用,_mssql是动态调用的,就是用才调用,不会一开始就调用,于是打包程序就不知道要不要包进exe里面,估计打包的时候不会去尝试运行pymssql里面的函数,因此也无法得知动态调用的模块,于是乎,老外给的解决方案就是在程序最开始手动调用,为了最小的程序开销,调用一下模块的版本信息就可以了,就如下面几句代码,程序直接调用,Pyinstaller或者py2exe就会把这些模块都放到包里去了,这样在运行exe的时候就不会提示缺模块了。
解决方案
下载 pymssql whl文件
下载 pymssql的whl文件,两个地址都可以下载
pymssql whl文件下载地址一:https://pypi.org/project/pymssql/#files
pymssql whl文件下载地址二:https://www.lfd.uci.edu/~gohlke/pythonlibs/#pymssql
文件名说明:pymssql-[版本号]-[python版本]-[平台].whl
比如:pymssql-2.2.2-cp37-cp37m-win_amd64.whl
代表:
- pymssql版本号为 2.2.2
- 适用于python3.7
- 使用环境为 windows系统
- 系统环境为 amd64 64位
查看本地python环境
PS C:\Users\XQ-Garson\Desktop\Python\gz> python
Python 3.7.3 (v3.7.3:ef4ec6ed12, Mar 25 2019, 22:22:05) [MSC v.1916 64 bit (AMD64)] on win32
Type "help", "copyright", "credits" or "license" for more information.
>>>
cmd窗口运行python就可以看到本机安装的python环境
示例:
本地安装python环境位:3.7.3 系统为 AMD64(64位)
通过whl文件安装
cmd命令定位到 whl 所在的文件夹,运行命令
pip install pymssql.whl
调整代码
修改py文件
在 import pymssql后面添加
import pymssql
修改为
import pymssql
# START 增加几行代码,解决打包exe pymssql报错问题
from pymssql import _mssql
from pymssql import _pymssql
import uuid
import decimal
_mssql.__version__
decimal.__version__
# END
然后重新打包exe,就OK了
成功运行