连接Python与SQL Server数据库

7

当我尝试连接Python和SQL Server时,出现以下错误:

"pyodbc.Error: ('08001','[08001] [Microsoft][ODBC SQL Server Driver][DBNETLIB]SQL Server不存在或拒绝访问。(17) (SQLDriverConnect)')"

以下是我的代码。

import pyodbc
connection = pyodbc.connect("Driver={SQL Server}; Server=localhost;          
Database=emotionDetection; uid=uname ;pwd=pw;Trusted_Connection=yes")
cursor = connection.cursor()
SQLCommand = ("INSERT INTO emotion"  "(happy, sad, angry) "
          "VALUES (?,?,?)")
Values = ['smile','cry','blame']
cursor.execute(SQLCommand,Values)
connection.commit()
connection.close()

这是我第一次尝试将Python与SQL Server连接。我不知道应该使用哪个驱动程序名称、服务器名称、用户名和密码。您有任何想法可以帮助我进行配置吗?


Server='.\SQLEXPRESS 你试过这个了吗? - Sudheesh Singanamalla
是的,但仍然发生相同的错误。 - Chathurika
6个回答

9

从Windows连接到MS SQL Server数据库:

这里有一个我自己使用的例子,用Python脚本连接到MS SQL数据库表:

import pyodbc
server = 'ip_database_server'
database = 'database_name'
username = 'user_name'
password = 'user_password'
driver = '{SQL Server}' # Driver you need to connect to the database
port = '1433'
cnn = pyodbc.connect('DRIVER='+driver+';PORT=port;SERVER='+server+';PORT=1443;DATABASE='+database+';UID='+username+
                 ';PWD='+password)
cursor = cnn.cursor()

'User'、'password'和'table_name'是由数据库管理员定义的属性,他应该向您提供这些属性。连接端口也由管理员定义。如果您正在尝试从Windows设备连接到数据库,则需要从Windows中的ODBC数据源管理员进入,并检查是否已安装了驱动程序

Windows机器上的ODBC数据源管理员在哪里。

ODBC Data Source Admin in Windows

图像为西班牙语,但您只需单击“驱动程序”选项卡,并检查驱动程序是否与图像中相同即可。

从Linux/Unix连接到MS SQL SERVER数据库:

如果您使用的是Linux/Unix,则应安装类似于'FreeTDS'和'unixODBC'的ODBC管理器。要配置它们,您可以参考以下链接中的示例:

示例:从Linux/Unix连接到Microsoft SQL Server

示例:安装和配置ODBC


提前感谢。我该如何找到用户名和密码?用户名和密码应该是什么? - Chathurika
我检查了数据源和SQL Server驱动程序,但仍然遇到相同的问题。我该如何进一步修复它? - Chathurika
@Chathurika 你是数据库管理员吗?我的意思是说,你是创建它的人吗?如果不是,那么你必须向他或她询问用户名密码表名服务器IP等信息,以便访问它。如果你创建了数据库,那么你应该在某个地方有这些信息。 - BSP
是的,我是数据库管理员。但我没有为数据库设置任何用户名或密码。 - Chathurika
请检查您正在使用的端口,或许它与1433不同。 - BSP
这对于默认实例对我有效,但是当我尝试连接命名实例时,它会给我错误。我也尝试了将server_name\instance_name放入。 - EXODIA

2

我正在使用SQL Server 2014。 - Chathurika

1
尝试使用SQLalchemy和pyodbc。

尝试这个:

import sqlalchemy
import pyodbc
from sqlalchemy import create_engine

engine = create_engine("mssql+pyodbc://user:password@host:port/databasename?driver=ODBC+Driver+17+for+SQL+Server")

cnxn = engine.connect()

使用相应的驱动程序

这对我有效

祝你好运!


1

库pymssql不需要任何驱动程序,可以在Windows和Ubunutu上工作。

import pymssql
import pandas as pd

server = 'yourusername'
username = 'yourusername'
password = 'yourpassword'
database = 'yourdatabase'
table_name = 'yourtablename'
conn = pymssql.connect(host=server,user=username,password=password,database=database)
dat = pd.read_sql("select * from table_name,conn)

天啊,这太容易了!我只需要选择一些数据,而不想让用户配置ODBC驱动程序,特别是跨操作系统。上面的代码完美地从Azure SQL数据库中读取数据,而无需任何其他外部配置或设置。这东西我一生都在哪儿呢?! - Zach Mierzejewski

0

工作示例对我最有效:

需要Mac ODBC驱动程序吗?

如果您需要使用Mac驱动程序,我使用了homebrew,并且在此处找到了命令

详细信息

个人而言,我最喜欢通过反向工程来学习,因此我分享了其中一个示例,可能有点粗糙,但我正在提高我的Python技能。

我创建的脚本允许我将我的Mac OS连接到AWS RDS实例。

整个脚本是复制粘贴,并稍微修改一下您的服务器信息即可运行。只需修改这些行以进行连接。

server = 'yourusername'
username = 'yourusername'
password = 'yourforgottencomplicatedpassword'
database = 'yourdatabase'

然后运行文件:python3 ~/Your/path/pyodbc_mssqldbtest.py,你就可以开始了。

#!/usr/bin/env python3
# -*- coding: utf-8 -*-
# =============================================================================
# Created By  : Jeromie Kirchoff
# Created Date: Mon July 31 22:32:00 PDT 2018
# FILENAME: pyodbc_mssqldbtest.py
# =============================================================================
"""The Module Has Been Build for Interaction with MSSQL DBs To Test the con."""
# =============================================================================
# Thanks to this post for headers https://dev59.com/N2cs5IYBdhLWcg3wmlWk
# Answer to an SO question: https://dev59.com/Q5_ha4cB1Zd3GeqPy3R4
# =============================================================================

import pyodbc


def runningwithqueries(query):
    """The Module Has Been Build to {Open, Run & Close} query connection."""
    print("\nRunning Query: " + str(query) + "\nResult :\n")
    crsr = cnxn.execute(query)
    columns = [column[0] for column in crsr.description]
    print(columns)
    for row in crsr.fetchall():
        print(row)
    crsr.close()

# =============================================================================
# SET VARIABLES NEEDED FOR SERVER CONNECTION
# =============================================================================
server = 'yourusername'
username = 'yourusername'
password = 'yourforgottencomplicatedpassword'
database = 'yourdatabase'

connStr = (r'DRIVER={ODBC Driver 17 for SQL Server};' +
           r"Integrated Security=True;" +
           r'SERVER=' + server +
           r';UID=' + username +
           r';PWD=' + password +
           r';DSN=MSSQL-PYTHON' +
           r';DATABASE=' + database + ';'
           )

print("Your Connection String:\n" + str(connStr) + "\n\n")

# =============================================================================
# CONNECT TO THE DB
# =============================================================================
cnxn = pyodbc.connect(connStr, autocommit=True)

# =============================================================================
# SET QUERIES TO VARIABLES
# =============================================================================
SQLQUERY1 = ("SELECT @@VERSION;")
SQLQUERY2 = ("SELECT * FROM sys.schemas;")
SQLQUERY3 = ("SELECT * FROM INFORMATION_SCHEMA.TABLES;")
SQLQUERY4 = ("SELECT * FROM INFORMATION_SCHEMA.COLUMNS;")
SQLQUERY5 = ("SELECT * FROM INFORMATION_SCHEMA.CHECK_CONSTRAINTS;")
SQLQUERY6 = ("EXEC sp_databases;")
SQLQUERY7 = ("EXEC sp_who2 'active';")

# =============================================================================
# RUN QUERIES
# YOU CAN RUN AS MANY QUERIES AS LONG AS THE CONNECTION IS OPEN TO THE DB
# =============================================================================
runningwithqueries(SQLQUERY1)
runningwithqueries(SQLQUERY2)
runningwithqueries(SQLQUERY3)
runningwithqueries(SQLQUERY4)
runningwithqueries(SQLQUERY5)
runningwithqueries(SQLQUERY6)
runningwithqueries(SQLQUERY7)

# =============================================================================
# CLOSE THE CONNECTION TO THE DB
# =============================================================================
cnxn.close()

0
import pyodbc 
conn = pyodbc.connect('Driver={SQL Server};' 'Server=**SERVER NAME**;' 'Database=**DATABASE NAME**;' 'Trusted_Connection=yes;') 
cursor = conn.cursor() 

cursor.execute('SELECT * FROM Output3')

这个可以工作,只要确保你正确地指定了相应的驱动程序、服务器和数据库名称!


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接