我正在尝试使用pymssql连接到Windows Server 2008上运行的SQL Server 2012数据库。
db = pymssql.connect(host='xxx',user='xxx',password='xxx',database='xxx')
Run Code Online (Sandbox Code Playgroud)
但是,我收到以下错误:
OperationalError:(20017,'DB-Lib错误消息20017,严重性9:\ n来自服务器的意外EOF \ nDB-Lib错误消息20002,严重性9:\ nAdaptive Server连接失败\ n')
完整的错误是:
Traceback (most recent call last):
File "XXX.py", line 2, in <module>
conn = pymssql.connect(host = 'XXX.com', user = 'xxx', password = 'xxx', database = 'xxx')
File "pymssql.pyx", line 556, in pymssql.connect (pymssql.c:7990)
raise OperationalError(e[0])
OperationalError: (20017, '\xa0\xff\xaf\x02\x90_\x8d\x02L\xd6\xa7\x02\xda\xad;DB-Lib error message 20017, severity 9:\nUnexpected EOF from the server\nDB-Lib error message 20002, severity 9:\nAdaptive Server connection failed\n')
Run Code Online (Sandbox Code Playgroud)
有人可以帮我弄清楚发生了什么吗?
首先,我的设置:
我希望能够在我的笔记本电脑上本地运行脚本,对照我的开发数据库的快照,该数据库很快就存在于我的VM中.我也不想让PITA在Windows VM中重建我的Python安装.
所以问题是:如何从Mac端访问我的VM中运行的SQL Server实例?要访问生产数据,我使用的是基于FreeTDS的pymssql.
我在通过Pymssql将实时系统连接到新的MSSQL数据库实例时遇到问题.我没有问题连接到以前的旧实例,但是当我将连接字符串更改为新的并在apache中重新加载我的代码时,我收到以下身份验证错误:
sqlalchemy.exc.OperationalError: (pymssql.OperationalError) (18456, "Login failed for user '*****'.DB-Lib error message 20018, severity 14:\nGeneral SQL Server error: Check messages from the SQL Server\nDB-Lib error message 20002, severity 9:\nAdaptive Server connection failed (*********************)\n")
Run Code Online (Sandbox Code Playgroud)
问题是,完全相同的连接(具有相同的登录详细信息)在本地工作正常.我可以通过Pymssql登录并访问新的数据库实例,没有任何问题.我假设我的FreeTD是最新的,因为我可以很好地连接到旧实例.任何建议都将非常感谢为什么新连接不适用于实时系统.
我今天在哪里:
TDSVER=7.3 tsql -H example.database.windows.net -U me -D ExampleDB -p 1433 -P notreallymypassword
Run Code Online (Sandbox Code Playgroud)
这不是:
>>> import pymssql
>>> pymssql.connect('example.database.windows.net', user='me', password='notreallymypassword', database='ExampleDB', tds_version='7.3')
Run Code Online (Sandbox Code Playgroud)
它失败了
Traceback (most recent call last):
File "<stdin>", line 1, in <module>
File "pymssql.pyx", line 635, in pymssql.connect (pymssql.c:10734)
File "_mssql.pyx", line 1902, in _mssql.connect (_mssql.c:21821)
File "_mssql.pyx", line 577, in _mssql.MSSQLConnection.__init__ (_mssql.c:6214)
File "_mssql.pyx", line 1704, in _mssql._tds_ver_str_to_constant (_mssql.c:18845)
_mssql.MSSQLException: unrecognized tds version: 7.3
Run Code Online (Sandbox Code Playgroud)
好的。好吧,那很奇怪。所以我回去尝试了tsqlusing TDSVER=7.2,它似乎工作正常。
尝试联系tds_version='7.2'给我:
Traceback (most recent call …Run Code Online (Sandbox Code Playgroud) 我知道Pypyodbc是Pyodbc的较新版本。之前有人问过这两个之间的比较问题,但我想将Pymssql添加到混合中。
我正在尝试使用 SqlAlchemy(以及 Pymssql 作为提供程序)在 SQL-Server 数据库上执行简单的原始 SQL 查询。
这是我的第一次尝试(使用execute连接方法并以 **kwargs 方式传递参数):
provider = DataProvider().engine
q = "select url from Crawler.CrawlSource where source=@source"
query = text(q)
result = provider.connect().execute(query, source ='mysource')
Run Code Online (Sandbox Code Playgroud)
我以教程中显示的任何方式传递了参数(作为 kwargs 传递并作为 dict 传递),但是它们都不起作用,并且当execute调用方法时抛出异常,表示'Must declare the scalar variable' @source好像没有参数传递给execute方法,似乎是 ORM (或者可能是数据提供程序(在本例中为 pymssql))无法识别传递给的参数execute方法的参数,并且仅将查询(不带参数)传递给数据库引擎(这会导致异常)。
我猜想 MSSQL-Server 提供程序 (Pymssql) 可能存在一些问题,因为 SQL-Server 不是 SqlAlchemy 和 Python 家族中的一等公民,但没有直接线索可能导致此问题。
正如我上面所说,我也尝试了其他方法
这是我的第二次尝试(使用execute连接方法并将参数作为字典传递):
provider = DataProvider().engine
q = "select url from Crawler.CrawlSource where source=@source"
query …Run Code Online (Sandbox Code Playgroud) 我是python的新手,我试图编写一个将值放入SQL数据库的脚本。
它是一个简单的2列表,如下所示:
CREATE TABLE [dbo].[pythonInsertTest](
[ID] [int] IDENTITY(1,1) NOT NULL,
[value] [varchar](50) NULL
Run Code Online (Sandbox Code Playgroud)
我尝试从python进行选择查询,那行得通!因此,连接或任何此类问题都不是问题。但是当我使用以下代码插入表中时:
import pymssql
conn = pymssql.connect(server='XXXX', user='XXXX', password='XXXX', database='XXXX')
cursor = conn.cursor()
cursor.execute("insert into pythonInsertTest(value) OUTPUT INSERTED.ID VALUES('test')")
row = cursor.fetchone()
while row:
print "Inserted Product ID : " +str(row[0])
row = cursor.fetchone()
Run Code Online (Sandbox Code Playgroud)
响应是:
$? && exit 1
Inserted Product ID : 20
Exit status: 0
Run Code Online (Sandbox Code Playgroud)
但是,如果我在sql管理器中查找并选择了该表中的所有行,则我刚刚添加的行不在其中...但是,当我在添加了SQL查询的管理器中手动插入行时。
需要注意的是,它确实跳过了通过我的python脚本“插入”的ID。
任何人以前都看过此书,或者知道该怎么办?
我正在使用 pypyodbc 连接到 SQL Server。我想将结果集存储到临时表中,就像我们在 SQL 中所做的那样。但每次我尝试这样做时,我都会收到以下错误消息:
pypyodbc.ProgrammingError: ('24000', '[24000] [Microsoft][ODBC SQL Server Driver]游标状态无效')
这就是我想查询的:
querytest = "SELECT id into #temp from Team"
cursor1.execute(querytest);
var = cursor1.fetchall()
print(var[:10])
Run Code Online (Sandbox Code Playgroud) 我正在尝试通过pymssql从python脚本执行与链接服务器通信的存储过程。手动运行时,SP可以工作,但是从python脚本运行时,出现以下错误:
(7391, 'The operation could not be performed because OLE DB
provider"SQLNCLI11" for linked server "DBLOG" was unable to begin a
distributed transaction.DB-Lib error message 20018, severity 16:
\nGeneral SQL Server error: Check messages from the SQL Server\n')
Run Code Online (Sandbox Code Playgroud)
我还没有找到任何在pymssql本身中引用此限制的内容。我不太确定从哪里开始。我使用pymssql做了大量工作,并且从未遇到任何连接问题,并且我已经验证了我使用的登录名具有足够的权限(甚至尝试使用SA)。
有任何想法吗?
谢谢!
如何使用 mssql 和 pymssql 模块通过 Python 中的 IP 远程连接到 MS SQL Server 数据库。要在本地连接,我使用 link = mssql+pymssql://InstanceName/DataBaseName
我启用了 TCP/IP 网络配置。但是我怎样才能获得连接链接呢?
谢谢。