Pyodbc - “Data source name not found, and no default driver specified”

后端 未结 5 1950
闹比i
闹比i 2020-11-27 15:39

I have trouble getting pyodbc work. I have unixodbc , unixodbc-dev, odbc-postgresql, pyodbc packages install

相关标签:
5条回答
  • 2020-11-27 16:06

    For me, it was all down to a single whitespace character.

    $cat /home/ec2-user/.odbc.ini
    [DSNNAME]
    Driver =FreeTDS
    Description=description
    Server =serverpath
    Port =1433
    Database =dbname
    

    Gave me the “Data source name not found, and no default driver specified” error.

    Removing all the whitespaces before the '=' character made it work.

    On a secondary note, using osql for DSN connection testing gives you a much more verbose description of any errors. It helped me a lot in the process.

    $ osql -S DSNNAME -U username -P password
    checking shared odbc libraries linked to isql for default directories...
        trying /txM ... no
        trying /tmp/sql ... no
        trying /tmp/sql ... no
        trying /w}H ... no
        trying /usr/loc ... no
        trying /tmp/sql.log ... no
        trying /home ... no
        trying /.odbc.ini ... no
        trying /usr/local/etc ... OK
    checking odbc.ini files
        reading /home/ec2-user/.odbc.ini
    [DSNNAME] found in /home/ec2-user/.odbc.ini
    found this section:
        [DSNNAME]
        Driver =FreeTDS
        Description=description
        Server =serverpath
        Port =1433
        Database =dbname
    
    looking for driver for DSN [DSNNAME] in /home/ec2-user/.odbc.ini
      no driver mentioned for [DSNNAME] in .odbc.ini
    looking for driver for DSN [default] in /home/ec2-user/.odbc.ini
    osql: error: no driver found for [DSNNAME] in .odbc.ini
    

    Comparing the error message against my ini file made triaging the issue a lot easier.

    0 讨论(0)
  • 2020-11-27 16:14

    For me, the issue was the actual location of my odbc.ini and odbcinst.ini files.

    On many systems, the install location of these files is in /etc/

    However, in my case, these files were located under /usr/local/etc/

    The could be determined by typing
    odbcinst -j

    Which yielded:

    unixODBC 2.3.0
    DRIVERS............: /usr/local/etc/odbcinst.ini
    SYSTEM DATA SOURCES: /usr/local/etc/odbc.ini
    FILE DATA SOURCES..: /usr/local/etc/ODBCDataSources
    USER DATA SOURCES..: /usr/local/etc/odbc.ini
    SQLULEN Size.......: 8
    SQLLEN Size........: 8
    SQLSETPOSIROW Size.: 8
    

    My odbc.ini files already exists in /etc, so the solution was to copy them over over from /etc/ to /usr/local/etc/

    cp /etc/odbc.ini /etc/odbcinst.ini /usr/local/etc/

    Edit: It's also worth noting that the path outputted by the odbcinst -j command can change depending on using sudo or not.

    0 讨论(0)
  • 2020-11-27 16:15

    I believe the answer to your problem is that in your ~/.odbc.ini file you are saying to use driver PostgreSQL - but you have not defined that driver in your /etc/odbcinst.ini file. Try changing PostgreSQL to PostgreSQL ANSI or PostgreSQL Unicode (both of which are defined in /etc/odbcinst.ini).

    0 讨论(0)
  • 2020-11-27 16:20

    I have the same problem. It turns out that the data source file missed: /etc/ODBCDataSources. Just touch that file and it works.

    0 讨论(0)
  • 2020-11-27 16:32

    For others troubleshooting this same generic error, ensure that you didn't accidentally add extraneous characters at the top of your odbc.ini file - which causes it to be invalid and all data-source declarations to be silently ignored (the error giving no indication of the specific problem).

    0 讨论(0)
提交回复
热议问题