DSN和SERVER关键字都没有提供Python3

时间:2017-09-05 20:18:46

标签: python python-3.x pyodbc dsn

我试图以稍微不同的方式连接到SQL数据库:使用和不使用参数。为什么不使用参数工作正常,但使用参数 - 给我一个错误。 我是否出现语法错误? 我浏览了每个字母,看不到任何东西。

import pandas as pd
import pyodbc

#parameters:
server = 'SQLDEV'
db = 'MEJAMES'

#Create the connection
conn = pyodbc.connect('DRIVER={SQL Server};server =' + server + ';DATABASE = ' + db + ';Trusted_Connection=yes;')
# query db
sql = """

select top 10 PolicyNumber, QuoteID, ProducerName from tblQuotes

"""
df = pd.read_sql(sql,conn)
df

上面的陈述给我一个错误enter image description here

但如果我这样做但不使用参数,那么它可以正常工作:

import pandas as pd
import pyodbc

#parameters:
#server = 'SQLDEV'
#db = 'MEJAMES'

#Create the connection
conn = pyodbc.connect("DRIVER={SQL Server};server=SQLDEV;database=MEJAMES;Trusted_Connection=yes;")
# query db
sql = """

select top 10 PolicyNumber, QuoteID, ProducerName from tblQuotes

"""
df = pd.read_sql(sql,conn)
df

enter image description here

3 个答案:

答案 0 :(得分:5)

Windows ODBC驱动程序管理器对连接字符串中的关键字非常挑剔。它们必须紧跟着等号,因此SERVER=...会起作用,但SERVER =...不会。

答案 1 :(得分:2)

尝试这种格式:

这应该有效

connection = pyodbc.connect("DRIVER={/opt/microsoft/msodbcsql17/lib64/libmsodbcsql-17.4.so.2.1};SERVER=%s;DATABASE=%s;UID=%s;PWD=%s"
                            % (server, database, username, password))

答案 2 :(得分:0)

这很疯狂,但我设法通过实际传递一个选项来解决它:extra_params:server = WHEREYOURSERVERLIVES \ DBSERVER

我正在django BTW上使用它pyodbc。

必须是一些错误。

类似的东西

    'ENGINE': 'sql_server.pyodbc',
    'NAME': 'YOURGREATESTDATABASE',
    'USER': 'YOURGREATESTUSERNAME',
    'PASSWORD': 'YOURGREATESTPASSWORD',
    'HOST': 'WHEREYOURSERVERLIVES\DBSERVER',
    'PORT': '',

    'OPTIONS': {
        'driver': 'ODBC Driver 17 for SQL Server',
        'extra_params': "Persist Security Info=False;server=WHEREYOURSERVERLIVES\\DBSERVER"