Fred-
I finally got around to trying this. It all worked perfectly until I
tried to access the MSSQL server from django. That fails with:
mod_wsgi (pid=27541): Exception occurred processing WSGI script
'/usr/local/motor/motor/wsgi.py'.
Traceback (most recent call last):
File "/usr/local/lib/python2.7/site-packages/django/core/handlers/wsgi.py",
line 243, in __call__
signals.request_started.send(sender=self.__class__)
File "/usr/local/lib/python2.7/site-packages/django/dispatch/dispatcher.py",
line 170, in send
response = receiver(signal=self, sender=sender, **named)
File "/usr/local/lib/python2.7/site-packages/django/db/__init__.py",
line 58, in reset_queries
for conn in connections.all():
File "/usr/local/lib/python2.7/site-packages/django/db/utils.py",
line 105, in all
return [self[alias] for alias in self]
File "/usr/local/lib/python2.7/site-packages/django/db/utils.py",
line 93, in __getitem__
backend = load_backend(db['ENGINE'])
File "/usr/local/lib/python2.7/site-packages/django/db/utils.py",
line 45, in load_backend
raise ImproperlyConfigured(error_msg)
ImproperlyConfigured: 'django.db.backends.sql_server.pyodbc' isn't an
available database backend.
Try using 'django.db.backends.XXX', where XXX is one of:
u'mysql', u'oracle', u'postgresql_psycopg2', u'sqlite3'
Error was: No module named sql_server.pyodbc.base
Any ideas?
On Mon, Jan 20, 2014 at 12:26 AM, Fred Stluka <[email protected]> wrote:
> Larry,
>
> I did it a long complicated way, but we recently had 2 new people
> join our team, and refined the process for them, and it seemed to
> go smoothly, so here's what they did.
>
> Some sections differ for Mac vs Linux, and some even for different
> Linux distros, but it should all work. I'm including all of it, even
> the part about how to install Python, Django, virtualenv, etc., which
> you probably already have, and MySQL, which you are not using so
> you can skip.
>
> The following document is in Markdown format.
>
> HHL is the name of our project. Change it to your own project name.
>
> Let me know how it works!
>
>
>
> # Setting up your development environment.
>
> ## Install Python 2.7, if it's not already on your system.
>
> ### Mac
>
> The Mac comes preinstalled with a 2.7 version of Python. Double-check the
> version as shown:
>
> $ /usr/bin/python --version
> Python 2.7.5
>
> If you don't get a 2.7 version of Python, or if you get a
> "No such file or directory" error, install your own version of Python via
> the [Homebrew][] package manager:
>
> $ brew install python
>
> ### Linux
>
> If your Linux system doesn't already have a version of Python, install
> one with the package manager.
>
> For Ubuntu and Debian:
>
> $ sudo apt-get install python
>
> On CentOS (and, presumably, Fedora and RedHat), see
> <http://toomuchdata.com/2012/06/25/how-to-install-python-2-7-3-on-centos-6-2/>.
>
> ## Install `virtualenv`
>
> Mac:
>
> The version of Python that comes pre-installed on the Mac comes with
> `easy_install`, so you can use that to install `virtualenv`:
>
> $ sudo /usr/bin/easy_install virtualenv
>
> Linux:
>
> You can either use your system's package manager (e.g.,
> `sudo apt-get install python-virtualenv` on Ubuntu and Debian), or you can
> install `virtualenv` manually, as described at
> <https://pypi.python.org/pypi/virtualenv>.
>
> ## Create and activate a virtual environment
>
> Where you put the environment is up to you; the following is just an
> example:
>
> $ virtualenv ~/pythons/hhl
>
> Confirm that you did, indeed, create a Python 2.7 virtual environment:
>
> $ ~/pythons/hhl/bin/python
> Python 2.7.5 (default, Nov 19 2013, 10:30:44)
> [GCC 4.2.1 Compatible Apple LLVM 5.0 (clang-500.2.79)] on darwin
> Type "help", "copyright", "credits" or "license" for more information.
> >>>
>
> Activate that environment:
>
> $ source ~/pythons/hhl/bin/activate
>
> ## Install MySQL
>
> Mac:
>
> Again, it's easiest to use [Homebrew][]:
>
> $ brew install mysql
>
> After installing MySQL, homebrew will display suggestions on how to get
> MySQL
> set up. Follow those instructions.
>
> Linux:
>
> You'll need both MySQL and the MySQL development files. Without the latter,
> you won't be able to build the MySQL Python driver.
>
> For Ubuntu and Debian:
>
> $ sudo apt-get install mysql-server libmysqlclient-dev
>
> On CentOS (and, presumably, Fedora and RedHat):
>
> $ sudo yum -y install mysql-devel
>
> ## Install the Python MySQL driver
>
> $ pip install MySQL-python
>
> ## Install non-Python ODBC libraries and tools
>
> ### Install unixODBC
>
> Mac:
>
> $ brew install unixodbc
>
> The `odbcinst.ini` file ends up in `/usr/local/etc/`.
>
> Linux:
>
> $ sudo apt-get install unixodbc-dev # Ubuntu and Debian
> $ sudo yum -y install unixODBC-devel # CentOS, RedHat, and Fedora
>
> The `odbcinst.ini` file ends up in `/etc/`.
>
> ### Install FreeTDS
>
> Mac:
>
> $ brew install freetds --with-unixodbc
>
> Note that the `freetds.conf` file ends up in `/usr/local/etc/freetds.conf`.
> Installing this Homebrew package also provides the `tsql` command, which
> can be useful for testing.
>
> Linux:
>
> This package is typically available via the Linux package manager.
>
> For Ubuntu and Debian:
>
> $ sudo apt-get install freetds-dev tdsodbc
>
> The `freetds.conf` file ends up in `/etc/freetds/`. If you need the
> `tsql` program (useful for testing), you also need the `freetds-bin`
> package:
>
> $ sudo apt-get install freetds-bin
>
> On CentOS (and, presumably, Fedora and RedHat):
>
> $ sudo yum -y install freetds-devel
>
> The `freetds.conf` file ends up in `/etc/`.
>
> ### Configure unixODBC and FreeTDS
>
> This blog post provides a good overview of the process:
> <http://lbolla.info/blog/2013/08/28/python-and-odbc>
>
> (NOTE: Those instructions talk about setting up a `$HOME/.odbcinst.ini`.
> That file does not appear to be necessary.)
>
> Find your `odbcinst.ini` file (see the section, above, on installing
> `unixODBC`), and make its contents look like this.
>
> [FreeTDS]
> Description = FreeTDS MSSQL
> # If you're on Linux, uncomment the following settings.
> #Driver = /usr/lib/x86_64-linux-gnu/odbc/libtdsodbc.so
> #Driver64 = /usr/lib/x86_64-linux-gnu/odbc/libtdsodbc.so
> #Setup = /usr/lib/x86_64-linux-gnu/odbc/libtdsS.so
> #Setup64 = /usr/lib/x86_64-linux-gnu/odbc/libtdsS.so
> # Mac settings
> Driver = /usr/local/lib/libtdsodbc.so
> Driver64 = /usr/local/lib/libtdsodbc.so
> UsageCount = 2
> CPTimeout =
> CPTimeToLive =
> DisableGetFunctions =
> DontDLCLose =
> ExFetchMapping =
> Threading =
> FakeUnicode =
> IconvEncoding =
> Trace =
> TraceFile =
> TraceLibrary =
>
> Next, add this section to your `freetds.conf` file (see the section,
> above, on installing FreeTDS, for the location on your operation system):
>
> :::ini
> [_your_odbc_dsn_name_]
> host = _your_db_host_name_or_ip_
> port = _your_db_port_number_
> tds version = 7.0
>
> ## Create the requirements.txt file, containing:
>
> Django==1.4.2
> MySQL-python==1.2.4
> pyodbc==3.0.7
> -e
> git+https://github.com/avidal/django-pyodbc.git@a329ba8e7ea9dfcffce18139863c977b1218c09b#egg=sql_server.pyodbc-dev
>
> ## Install all the packages
>
> $ pip install -r requirements.txt
>
> ### Mac OS X note
>
> The `pyodbc` package that _pip_ installs uses iODBC by default. We want it
> to use `unixODBC`, instead, for a couple reasons.
>
> * First, there are numerous sites on the Internet that make claims such as
> "iODBC is a slightly less desirable ODBC manager than unixODBC"
>
> (http://www.cerebralmastication.com/2013/01/installing-debugging-odbc-on-mac-os-x/).
> More people _seem_ to have better luck with `unixODBC`.
> * Second, we're using `unixODBC` on Linux, and the configuration is already
> complicated enough. So, why not just use the same approach on both
> platforms?
>
> To get `pyodbc` to use `unixODBC` on the mac, you have to build it from
> source,
> and you have to hack the `setup.py`. Here's how to do it.
>
> Create the pyodbc1.patch file containing:
>
> *** setup.py.orig 2013-12-19 21:49:10.000000000 -0500
> --- setup.py 2013-12-19 21:35:21.000000000 -0500
> ***************
> *** 145,151 ****
>
> elif sys.platform == 'darwin':
> ! # OS/X now ships with iODBC.
> ! settings['libraries'].append('iodbc')
>
> # Apple has decided they won't maintain the iODBC system in
> OS/X and has added deprecation warnings in 10.8.
> # For now target 10.7 to eliminate the warnings.
> --- 145,151 ----
>
> elif sys.platform == 'darwin':
> ! # OS/X now ships with iODBC. We need unixodbc, however.
> ! settings['libraries'].append('odbc')
>
> # Apple has decided they won't maintain the iODBC system in
> OS/X and has added deprecation warnings in 10.8.
> # For now target 10.7 to eliminate the warnings.
>
> Do these steps:
>
> $ . ~/pythons/hhl/bin/activate
> $ cd /tmp
> $ git clone https://code.google.com/p/pyodbc
> $ cd pyodbc
> $ patch < pyodbc1.patch
> $ pip uninstall pyodbc
> $ python setup.py install
>
> ## Install the SQL Server ODBC backend
>
> `pip install` does not completely install the SQL Server ODBC backend, so
> there's one more manual step. You must manually copy some software within
> your Python virtual environment.
>
> $ cd ~/pythons/hhl/lib/python2.7/site-packages
> $ cp -r ../../../src/sql-server.pyodbc/sql_server django/db/backends
>
> ## Set up your Django environment, by adding this to settings.py:
>
> DATABASES = {
> 'cf': {
> 'ENGINE' : 'django.db.backends.sql_server.pyodbc',
> 'NAME' : '_your_db_name_',
> 'USER' : '_your_db_username_',
> 'PASSWORD' : '_your_db_password_',
> # ODBC DSN defined in /etc/freetds.conf
> 'HOST' : '_your_odbc_dsn_name_',
> # Ignored for Windows; Required for Linux
> 'OPTIONS' : {
> # ODBC driver name in /etc/odbcinst.ini
> 'driver': 'FreeTDS',
> },
> },
> }
>
> ## Verify that Python can get to the SQL Server database
>
> At this point, you should be able to open a connection to the HHL test
> SQL Server database as follows:
>
> $ python
> Python 2.7.5+ (default, Sep 19 2013, 13:48:49)
> [GCC 4.8.1] on linux2
> Type "help", "copyright", "credits" or "license" for more information.
> >>> import pyodbc
> >>> conn = pyodbc.connect('DRIVER=FreeTDS;'
> 'SERVER=_your_db_host_name_or_ip_;'
> 'PORT=_your_db_port_number_;'
> 'DATABASE=_your_db_name_;'
> 'UID=_your_db_username_;'
> 'PWD=_your_db_password_')
> >>> conn
> <pyodbc.Connection object at 0x7f6df62d5f80>
>
>
> ## Initialize your database
>
> $ python manage.py syncdb
>
> ## Fire it up!
>
> $ python manage.py runserver
>
> [Homebrew]: http://brew.sh/
>
>
>
> Good luck!
>
> --Fred
> ________________________________
> Fred Stluka -- mailto:[email protected] -- http://bristle.com/~fred/
> Bristle Software, Inc -- http://bristle.com -- Glad to be of service!
> Open Source: Without walls and fences, we need no Windows or Gates.
> ________________________________
>
> On 1/19/14 6:31 PM, Larry Martell wrote:
>
> Fred-
>
> This project has been put on the back burner for a few weeks, but I
> will be getting back to it. If you could dig up your notes on this,
> that would be really great.
>
> Thanks very much!
> -larry
>
> On Sun, Jan 19, 2014 at 7:01 AM, Fred Stluka <[email protected]> wrote:
>
> Larry,
>
> We tried django-mssql and gave up. Much better luck with
> django-pyodbc. We use the avidal version of it, along with pyodbc,
> FreeTDS, and unixODBC. Works perfectly. If you like, I can dig up
> my notes on exactly how we made the connection from Django to
> MS SQL Server.
>
> --Fred
> ________________________________
> Fred Stluka -- mailto:[email protected] -- http://bristle.com/~fred/
> Bristle Software, Inc -- http://bristle.com -- Glad to be of service!
> Open Source: Without walls and fences, we need no Windows or Gates.
> ________________________________
>
> On 1/14/14 6:15 PM, Larry Martell wrote:
>
> I am trying to connect to a MS SQL server from django on Linux using
> Vernon Cole's django-mssql package
> (https://bitbucket.org/vernondcole/django-mssql-ado-merge/src).
>
> When I first tried to connect it failed with:
>
> Exception Type: DatabaseError at /report/CDSEM/EventsTable/
> Exception Value: Cannot create connection
> to=PYRO:[email protected]:9099
>
> I traced it through
> /usr/lib/python2.6/site-packages/adodbapi/remote.py and I see it tries
> to access os.environ['PROXY_PORT'], which is not defined and then it
> defaults to 9099 - Is that the correct port or should I set
> os.environ['PROXY_PORT']? How can I tell what port MS SQL db is
> listening on? I googled this and it said the default MS SQL port is
> 1433. I set os.environ['PROXY_PORT'] to that and now I don't get that
> error but it times out:
>
> /usr/lib/python2.6/site-packages/Pyro4-4.22-py2.6.egg/Pyro4/core.py(160)__call__()
>
> -> return self.__send(self.__name, args, kwargs)
> (Pdb) n
> TimeoutError: TimeoutE...imeout',)
>
> I tried opening port 1433 with iptables, but still no joy.
>
> I can connect to the MS SQL db locally from the host it's running so I
> know it's up and my credentials are correct, and I can ping the
> Windows box from the Linux host I am running on, so I know there is
> connectivity to it from there.
>
> Anyone here ever get this working? Anyone have any ideas as to what my
> problem is or how I can debug this further?
>
> Thanks!
> -larry
>
> --
> You received this message because you are subscribed to the Google Groups
> "Django users" group.
> To unsubscribe from this group and stop receiving emails from it, send an
> email to [email protected].
> To post to this group, send email to [email protected].
> Visit this group at http://groups.google.com/group/django-users.
> To view this discussion on the web visit
> https://groups.google.com/d/msgid/django-users/52DCB372.3090403%40bristle.com.
>
> For more options, visit https://groups.google.com/groups/opt_out.
--
You received this message because you are subscribed to the Google Groups
"Django users" group.
To unsubscribe from this group and stop receiving emails from it, send an email
to [email protected].
To post to this group, send email to [email protected].
Visit this group at http://groups.google.com/group/django-users.
To view this discussion on the web visit
https://groups.google.com/d/msgid/django-users/CACwCsY5V0w09jk3Q4bsmLmTearZFvu%3DrBxVocLzbPvndygVcTQ%40mail.gmail.com.
For more options, visit https://groups.google.com/d/optout.