2012-11-15 26 views
9

Một nhà phát triển khác và tôi đang thiết lập dự án django (v1.4.2) bằng cơ sở dữ liệu máy chủ SQL cũ (SQLEXPRESS) trên máy chủ khác. Cho đến nay, chúng tôi đã có thể kết nối với cơ sở dữ liệu từ linux và mac bằng cách sử dụng django-pyodbc, và từ một máy tính xách tay chạy windows 7 bằng cách sử dụng django-mssql. Tôi muốn sử dụng django-pyodbc trên máy tính xách tay để giữ cho môi trường đồng bộ.Vấn đề kết nối máy chủ SQL Django-pydobc trên cửa sổ

Trên máy tính xách tay:

  • pyodbc (3.0.6) được cài đặt và trong một kịch bản phi django py Tôi có thể kết nối và chạy các câu lệnh sql
  • Downloaded django-pyodbc 1,4 bằng cách tải về zip ; Tôi không chắc mình đã cài đặt đúng:
    • Tôi giải nén tệp và chạy tệp setup.py trong thư mục trên cùng; nó đặt một thư mục sql_server trong thư mục/lib/site-packages thư mục
  • sao chép thư mục sql_server này đến/django/db/backends
  • Tạo một môi trường PYTHONPATH biến trỏ đến/django/db/backends/sql_server
    • không chắc chắn liệu nó có được trỏ tới/site-packages/sql_server không?
  • Tạo một nguồn dữ liệu ODBC (System DSN)
    • kiểm tra tùy chọn kết nối làm việc
  • biên tập lại các entry DATABASE trong settings.py là gần như chính xác như các phiên bản Linux (xem chi tiết bên dưới)

Vì vậy, nó không hoạt động, và tôi nhận được thông báo lỗi sau, và không có ý tưởng phải làm gì tiếp theo:

('08001', '[08001] [Microsoft][ODBC SQL Server Driver][DBNETLIB]SQL Server does not exist or access denied. (17) (SQLDriverConnect); [01000] [Microsoft][ODBC SQL Server Driver][DBNETLIB]ConnectionOpen (Connect()). (53); [01S00] [Microsoft][ODBC SQL Server Driver]Invalid connection string attribute (0)') 

tôi thiết lập các tập tin django settings.py như như vậy:

DATABASES = { 
    'default': { 
     'ENGINE': 'django.db.backends.sql_server.pyodbc', 
     'NAME': 'test', 
     'USER': 'test', 
     'PASSWORD': 'something_else', 
     'HOST': 'mssqlx', 
     'PORT': '12345', 
     'OPTIONS': { 
      'driver': 'SQL Server', 
     }, 
    }, 
} 

Trên Linux, tập tin cài đặt của tôi có một mục CƠ SỞ DỮ LIỆU như vậy:

DATABASES = { 
    'default': { 
     'ENGINE': 'django.db.backends.sql_server.pyodbc', 
     'NAME': 'test', 
     'USER': 'test', 
     'PASSWORD': 'something_else', 
     'HOST': 'mssqlx',  # ODBC DSN defined in /etc/freetds.conf 
     'PORT': '12345',  # Probably unneeded. Set in mssqlx 
     'OPTIONS': { 
      'driver': 'SQL Server', # ODBC driver name in /etc/odbcinst.ini 
      'extra_params': "TDS_VERSION=7.0" # Probably unneeded. Set in mssqlx 
     } 
    }, 
} 

không biết nếu nó sẽ giúp giải quyết vấn đề này, nhưng sử dụng django-mssql (chỉ chạy trên các cửa sổ), mục nhập (hoạt động) là:

DATABASES = { 
    'default': { 
     'ENGINE': 'django.db.backends.sqlserver_ado', 
     'NAME': 'test', 
     'USER': 'test', 
     'PASSWORD': 'something_else', 
     'HOST': '199.555.0.10',   # changed for this example 
     'PORT': '12345', 
     'OPTIONS': {'provider': 'SQLOLEDB'} 
    }, 
} 

Không biết thông tin nào khác có thể hữu ích. Cảm ơn bạn vì bất kỳ trợ giúp hoặc thông tin chi tiết nào bạn có thể cung cấp.

---- nghiệm tử thi ---- Đây là những gì cuối cùng làm việc:

nhập một phần trong cài đặt cho CƠ SỞ DỮ LIỆU:

'default': { 
     'ENGINE' : 'django.db.backends.sql_server.pyodbc', 
     'NAME'  : 'test_db_name', 
     'USER'  : 'test_db_user_name', 
     'PASSWORD' : 'password', 
     # ODBC DSN defined in /etc/freetds.conf 
     'HOST'  : 'mssql_test', 
     # Ignored for Windows; Required for Linux 
     'OPTIONS' : { 
      # ODBC driver name in /etc/odbcinst.ini 
      'driver': 'SQL Server', 
      # NOTE: dsn option is added dynamically later, for Windows 
     } 
    }, 

# The ODBC DSN name specified above as DATABASES.default.HOST is ignored on 
# Windows, where it must be specified as DATABASES.default.OPTIONS.dsn instead. 
# However, we haven't found a way to make DATABASES.default.OPTIONS.dsn work in 
# Linux (and probably the same for Mac). It causes the error: 
# Data source name not found, and no default driver specified 
# Therefore we add it here, but only for Windows. 
# Note: The username and pwd in the windows dsn file is apparently NOT used 
#  (b/c server hosts both test and prod database in same MSSQL 
#  instance, both test and prod dsn files happen to work - they have the 
#  same ip address and port number, but different username/password's) 
# 
# On 64-bit Windows, with our current 32-bit version of pyodbc, the DSN 
# must be created via: 
# C:\Windows\SysWOW64\odbcad32.exe 
# instead of the regular "ODBC Data Sources" app in Control Panel, which 
# invokes: 
# C:\Windows\system32\odbcad32.exe 
# 
# os.name is... 
#  nt  for Hans' laptop (Windows 7) 
#  posix for the "Amazon Linux AMI" (CentOS) on AWS 
#  posix for Fred's Mac 
if os.name == 'nt':  # Windows 
    DATABASES['cf']['OPTIONS']['dsn'] = 'mssql_test' 
+4

Nếu bạn "đăng bài tử thi" sẽ trả lời câu hỏi của bạn, hãy thêm câu trả lời đó làm câu trả lời và chấp nhận câu hỏi hoặc xóa câu hỏi (vì vậy nó không bị treo quanh như chưa được trả lời). – meataxe

Trả lời

1

Hãy thử sử dụng https://github.com/michiya/django-pyodbc-azure. Điều này sẽ hoạt động trên cả Linux và Windows.

Sau đó, xác định cài đặt cơ sở dữ liệu của bạn như vậy:

DATABASES = { 
    'default': { 
     'ENGINE': 'sql_server.pyodbc', 
     'NAME': 'dbname', 
     'HOST': 'dsn_entry', 
     'PORT': 'port', 
     'USER': '', 
     'PASSWORD': 'pass', 
     'OPTIONS': { 
      'driver': 'FreeTDS', 
      'dsn': 'dsn_entry', 
      'host_is_server': True 
     } 
    } 
} 

Trong Windows các 'driver' mục trong OPTIONS nên là:

'driver': 'SQL Native Client', 

Chỉnh sửa: Rất tiếc, không thấy rằng bạn đã giải quyết vấn đề . Để lại câu trả lời của tôi ở đây như là tài liệu tham khảo.

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