2012-02-06 6 views
8

Tôi đang cố gắng kết nối với một cá thể SQL Server từ một hộp Windows bằng cách sử dụng pymssql (phiên bản 2.0.0b1-dev-20111019 với Python 2.7.1). Tôi đã thử các cách tiếp cận cơ bản nhất từ ​​giao diện điều khiển:Kết nối với SQL Server instance bằng pymssql trên Windows

import pymssql 
c = pymssql.connect(host = r'servername\instance', 
        user = 'username', 
        password = 'userpassword') 

Để đối phó với điều này, tôi nhận được lỗi rất hữu ích: InterfaceError: Connection to the database failed for an unknown reason.

Tôi khá tự tin rằng thông tin kết nối là chính xác, vì nó hoạt động khi tôi sử dụng adodbapi, với các lệnh sau:

import adodbapi 
c = adodbapi.connect(r'Provider=sqloledb;Data Source=servername\instance;User ID=username;password=userpassword;' 
c.close 

Tôi đã thử thêm số cổng vào thông số máy chủ, với cùng một kết quả. Có ai có đề xuất về cách giải quyết vấn đề này không?


Ngẫu nhiên, tôi đã đọc câu trả lời tại "Unable to connect to SQL Server via pymssql". OP cuối cùng đã giải quyết vấn đề của mình bằng cách cấu hình chính xác FreeTDS, mà từ những gì tôi có thể nói, không được sử dụng bởi pymssql trên Windows.


Dựa trên đề xuất của @ cha0site, tôi đã thử chỉ sử dụng tên máy chủ, thay vì tên máy chủ và cá thể. Điều này dẫn đến lỗi tương tự, nhưng dường như mất nhiều thời gian hơn để tạo lỗi (mặc dù truy nguyên vẫn cho biết cùng một dòng). Lý do tôi đã chỉ định cá thể là tôi không thể kết nối bằng SSMS trừ khi tôi chỉ định cá thể, vì vậy tôi giả định rằng nó sẽ là cần thiết cho các kết nối khác.


Tôi hiện cũng đã thử pymssql.connect(host='servername', user='username', password='userpassword', database='instance') với cùng một kết quả (dựa trên nhận xét của @ Sid). Dựa trên pymssql documentation, tôi tin rằng tham số database được sử dụng để chỉ định cơ sở dữ liệu ban đầu mà người dùng được kết nối với, thay vì trường hợp.

Chỉ cần làm rõ, "cá thể" là tên được cung cấp trong khi cài đặt SQL Server, không phải là cơ sở dữ liệu trong cài đặt đó. Nó xảy ra với tôi rằng nó có thể là pymssql không hỗ trợ ký hiệu này, vì vậy tôi sẽ xem xét lại cấu hình lại SQL Server dụ để nó không được yêu cầu.


Tôi đã cài đặt lại SQL Server làm phiên bản mặc định, chứ không phải trường hợp được đặt tên, cho phép tôi kết nối mà không chỉ định tên cá thể. adodbapi vẫn hoạt động (không có /instance), nhưng pymssql vẫn trả về cùng một lỗi. Tôi cũng đã xóa và cài đặt lại pymssql từ bản lưu trữ mới tải xuống (vẫn có cùng phiên bản).

+0

Tôi nghĩ bạn cần chuyển tên máy chủ cho 'máy chủ' và không phải là Nguồn dữ liệu ADODB. – cha0site

+0

@ cha0site: "Nguồn dữ liệu ADODB" trong trường hợp này là tên máy chủ (cộng với cá thể). adodbapi cho phép bạn chỉ định tên máy chủ hoặc địa chỉ IP ở vị trí đó, thay vì nguồn dữ liệu có tên. – Allan

+0

Vâng.Tôi đang nói bạn nên thả ví dụ và chỉ cho nó tên máy chủ. – cha0site

Trả lời

0

Kiểm tra tập tin freetds.conf của bạn và xem nếu bạn đã thiết lập các cổng , sau đó kiểm tra lại các liên quan:.

DB = pymssql.connect(host='DB',user='youruser',password='yourpwd',database='yourDBname') 

Edit: ví dụ về tập tin freetds.conf Python của tôi:

host = 'IP' 
port = 1219