2010-11-11 44 views
8

Tôi đang cố gắng kết nối với SQL Server đang chạy trên hệ thống Windows XP từ hệ thống * nix trên máy chủ cục bộ qua pymssql. Tuy nhiên, kết nối thất bại như hình dưới đâyKhông thể kết nối với SQL Server qua pymssql

db = pymssql.connect(host='192.168.1.102',user='www',password='test',database='TestDB') 
Traceback (most recent call last): 

File "<stdin>", line 1, in <module> 
File "pymssql.pyx", line 457, in pymssql.connect (pymssql.c:6041) 
raise InterfaceError(e[0]) 
pymssql.InterfaceError: Connection to the database failed for an unknown reason. 

Những điều tôi đã cố gắng:

  1. Set SQL Server và trình duyệt để chạy như một máy chủ mạng.
  2. Thiết lập người dùng 'www'. Tôi cũng đã thử nghiệm người dùng này cục bộ trong SQL Studio.
  3. Tắt tường lửa Windows (tạm thời tất nhiên).

Tôi thiếu SOMETHING - Tôi không biết nó là gì. Tôi đã thử tất cả các tùy chọn menu vô hạn trên Windows để không có kết quả. Một điều tôi nhận thấy là nếu tường lửa của Windows là trên (tôi thiết lập một ngoại lệ cho SQL Server) python tạm dừng một thời gian dài và sau đó cung cấp cho các lỗi. Nếu tường lửa bị tắt, lỗi sẽ xuất hiện ngay lập tức.

Có bất kỳ nhật ký nào tôi có thể xem trong SQL Server không?

+0

để sử dụng công cụ gỡ lỗi cấp thấp. –

+0

Cảm ơn! Tôi chạy wireshark và nó cung cấp một số dữ liệu - một "ack" đơn giản xuất hiện. Dường như không có nhiều thứ để tiếp tục. Thông tin nói "ms-sql-s> 50051 [RST, ACK] Seq = 1 Ack = 1 Win = 0 Len = 0. – Christopher

+0

Tôi xem thêm chi tiết." Thông tin chuyên gia "nói" Thiết lập lại kết nối (RST) "- không chắc chắn – Christopher

Trả lời

11

OK! Tôi nghĩ rằng nguồn gốc của vấn đề không đưa ra TDS Tự do mà nó cần. TDS dường như là trình điều khiển đằng sau pymssql và cung cấp khả năng kết nối với các cơ sở dữ liệu khác - SQL Server là một trong số đó.

Tệp freetds.conf nằm trong/usr/local/etc trên hệ thống của tôi (Mac Book Pro).

Tệp này chứa các giá trị mặc định từ quá trình cài đặt. Tuy nhiên, trước đây tôi đã thêm một định nghĩa để tôi có thể kết nối nhưng quên nó và tiếc là đã không ghi chú vào nó.

Dù sao, đây là một ví dụ về những gì tôi nối vào freetds.conf:

[SomeDB] 
    host = 192.168.1.102 
    port = 1219 
    tds version = 7.0 

Tuy nhiên, những gì là khó hiểu là tôi thiết lập các cổng vào 1219. Tôi đã có nó thiết lập bằng tay để 1433 trong SQL Studio . Ngoài ra, tôi đang sử dụng phiên bản TDS 0,82 vì vậy tôi không biết làm thế nào 7.0 phù hợp trong

Tiếp theo, tôi đã thử nghiệm khả năng kết nối sử dụng 'TSQL' như sau:.

tsql -S SomeDB -U www 

tôi nhập mật khẩu và nhận được một lệnh - cho phép truy vấn SQL.

Tiếp theo, tôi được thử nghiệm kết nối sử dụng pymssql như sau:

db = pymssql.connect(host='SomeDB',user='www',password='cylon',database='TestDB') 

Như bạn thấy, tôi cần phải sử dụng tên máy chủ từ tập tin freetds.conf và KHÔNG IP trực tiếp. Sau đó tôi đã thử nghiệm một truy vấn đơn giản với mã python bổ sung để đảm bảo tôi có thể đọc từ cơ sở dữ liệu.

Tôi hy vọng điều này sẽ giúp người khác trong tương lai.

+0

Tôi dường như không có freetds.conf trên hệ điều hành Windows của mình. Tôi nhận được lỗi này với chuỗi kết nối: 'host = 10.43.32.211: 1433, database = v000001, trust = True' – IAbstract

+0

oh, có thể' pymssql' không sử dụng chuỗi kết nối nhưng được đặt tên params (không giống như một số thư viện khác đó) ... hơi lạ, nhưng được rồi. – IAbstract

0

đây có phải là máy tính windows u hoạt động không? xác định các cổng 1433. nó có vẻ là một lỗi trong api khách hàng mssql, mà cố gắng sử dụng Namedpipes thay vì TCP/IP.

+0

Cảm ơn! Có vẻ như tôi cần phải xác định cổng 1433 đặc biệt.Wireshark cho thấy một số phản ứng khác mà không có cổng. hiển thị "ms-sql-s". – Christopher

2

Dường như bạn đã giải quyết vấn đề này, nhưng đối với bất kỳ ai khác từ google đến vùng đất này: hãy kiểm tra để đảm bảo rằng ủy quyền chế độ hỗn hợp được bật trên Máy chủ MS SQL của bạn.Nó mặc định chỉ cho phép ủy quyền Windows và điều này sẽ gây ra lỗi này trong pymssql.

Các vấn đề liên quan