Python使用SQL Server数据库


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数据库模块

PowerShell 全选
pip install pymssql

使用

导入模块

Python 全选
import pymysql

python 操作mssql代码

Python 全选
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后运行报错

 pymssql打包exe运行报错信息
PS C:\Users\XQ-Garson\Desktop\Python\gz\dist> .\run.exe
Traceback (most recent call last):
  File "run.py", line 27, in <module>
  File "PyInstaller\loader\pyimod03_importers.py", line 546, in exec_module
  File "pymssql\__init__.py", line 3, in <module>
  File "src\pymssql\_pymssql.pyx", line 1, in init pymssql._pymssql
ModuleNotFoundError: No module named 'pymssql._mssql'
[12212] Failed to execute script 'run' due to unhandled exception!
PS C:\Users\XQ-Garson\Desktop\Python\gz\dist>

Python使用SQL Server数据库

 注意

如果直接运行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

Python使用SQL Server数据库

文件名说明:pymssql-[版本号]-[python版本]-[平台].whl

比如:pymssql-2.2.2-cp37-cp37m-win_amd64.whl

代表:

  • pymssql版本号为 2.2.2
  • 适用于python3.7
  • 使用环境为 windows系统
  • 系统环境为 amd64 64位

查看本地python环境

PowerShell 全选
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了

成功运行

Python使用SQL Server数据库

 

 

版权声明:本文为YES开发框架网发布内容,转载请附上原文出处连接
管理员
上一篇:Python Selenium 爬虫如何隐藏Headles-Chrome不被检测出来 避免检测
下一篇:SQL表数据多的时候创建索引失败,提示:- 无法创建索引“idx_**”。执行超时已过期。完成操作之前已超时或服务器未响应。
评论列表

发表评论

评论内容
昵称:
关联文章

Python使用SQL Server数据库
GZDBHelper连接SQL Server 数据库
SQL Server 数据库安全之角色
SQL Server 数据库类型和.NET数据类型映射关系
SQL Server获得所有数据库,所有表试图和字段
使用SQL 创建数据库备份作业
Python连接MSSQL数据库pyodbc方案
SQL Server 查询参数管理类
SQL Server被防止木马记录,数据库病毒植入
sql server系统表详细说明 之 sys.server_triggers
sql server系统表详细说明 之 sys.sql_modules
使用 mitmproxy + python 做拦截代理
SQL Server中常用全局变量介绍
sql server系统表详细说明 之 sys.columns
sql server系统表详细说明 之 sys.tables
sql server系统表详细说明 之 sys.stats
sql server系统表详细说明 之 sys.parameters
sql server系统表详细说明 之 sys.system_parameters
sql server系统表详细说明 之 sys.all_parameters
sql server系统表详细说明 之 sys.masked_columns

联系我们
联系电话:15090125178(微信同号)
电子邮箱:garson_zhang@163.com
站长微信二维码
微信二维码