Py学习  »  Python

正在将Microsoft SQL Server中的数据读取到Python中[重复]

Rdmican • 5 年前 • 1963 次点击  

我正试图通过python连接到sql,以便在microsoft sql server上的一些sql数据库上运行一些查询。从我在网上和这个论坛上的研究来看,最有前途的图书馆似乎是pyodbc。所以我做了以下代码

import pyodbc
conn = pyodbc.connect(init_string="driver={SQLOLEDB}; server=+ServerName+; 
database=+MSQLDatabase+; trusted_connection=true")
cursor = conn.cursor()

并得到以下错误

Traceback (most recent call last):
  File "C:\Users...\scrap.py", line 3, in <module>
    conn = pyodbc.connect(init_string="driver={SQLOLEDB}; server=+ServerName+; database=+MSQLDatabase+; trusted_connection=true")
pyodbc.Error: ('IM002', '[IM002] [Microsoft][ODBC Driver Manager] Data source name not found and no default driver specified (0) (SQLDriverConnect)')

我看了下面的帖子,并尝试将驱动程序更改为{sql server},并且之前在sas中使用odbc链接进行了连接,这部分是我上面的代码所基于的,因此不需要安装其他任何东西。

pyodbc.Error: ('IM002', '[IM002] [unixODBC][Driver Manager]Data source name not found, and no default driver specified (0) (SQLDriverConnect)')

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

谢谢

Python社区是高质量的Python/Django开发社区
本文地址:http://www.python88.com/topic/48237
 
1963 次点击  
文章 [ 8 ]  |  最新文章 5 年前
mondieki
Reply   •   1 楼
mondieki    8 年前

另一种方法是 installing Microsoft ODBC驱动程序13,然后替换 SQLOLEDB 具有 ODBC Driver 13 for SQL Server

当做。

LCJ
Reply   •   2 楼
LCJ    6 年前

下面的python代码对我有效。为了检查ODBC连接,我首先创建了一个4行C控制台应用程序,如下所示。

python代码

import pandas as pd
import pyodbc 
cnxn = pyodbc.connect("Driver={SQL Server};Server=serverName;UID=UserName;PWD=Password;Database=RCO_DW;")
df = pd.read_sql_query('select TOP 10 * from dbo.Table WHERE Patient_Key > 1000', cnxn)
df.head()

调用存储过程

 dfProcResult = pd.read_sql_query('exec dbo.usp_GetPatientProfile ?', cnxn, params=['MyParam'] )

检查ODBC连接的C程序

    static void Main(string[] args)
    {
        string connectionString = "Driver={SQL Server};Server=serverName;UID=UserName;PWD=Password;Database=RCO_DW;";
        OdbcConnection cn = new OdbcConnection(connectionString);
        cn.Open();
        cn.Close();
    }
Alfred Huang
Reply   •   3 楼
Alfred Huang    6 年前

尝试使用PytDS,它比整个更复杂的环境工作。 pyodbc 更容易安装。

我在Ubuntu18.04上成功了

裁判: https://github.com/denisenkom/pytds

文档中的示例代码:

import pytds
with pytds.connect('server', 'database', 'user', 'password') as conn:
    with conn.cursor() as cur:
        cur.execute("select 1")
        cur.fetchall()
Andrew
Reply   •   4 楼
Andrew    6 年前

这是一些新手的照片。

enter image description here

Franco
Reply   •   5 楼
Franco    7 年前

我喜欢这样…那就容易多了

http://www.pymssql.org/en/stable/pymssql_examples.html

conn = pymssql.connect("192.168.10.198", "odoo", "secret", "EFACTURA")
cursor = conn.cursor()
cursor.execute('SELECT * FROM usuario')
Community Benjamin Gruenbaum
Reply   •   6 楼
Community Benjamin Gruenbaum    7 年前

在客户端和服务器之间的数据源连接中,通常有两种类型:使用驱动程序的ODBC和使用提供程序的OLEDB。在编程界,它是 regular debate 连接到数据源时要走哪条路。

你在使用提供者, SQLOLEDB ,但将其指定为驱动程序。据我所知,pyodbc和pypyodbc模块都不支持window oledb连接。然而, adodbapi 是否使用Microsoft ADO作为基础组件。

下面是连接参数的两种方法。还有,我 string format 作为连接的变量没有在字符串中正确打断引号。你会注意到我把花括号翻了一番,因为它是连接字符串和 string.format() 也使用它。

# PROVIDER
import adodbapi
conn = adodbapi.connect("PROVIDER=SQLOLEDB;Data Source={0};Database={1}; \
       trusted_connection=yes;UID={2};PWD={3};".format(ServerName,MSQLDatabase,username,password))
cursor = conn.cursor()

# DRIVER
import pyodbc
conn = pyodbc.connect("DRIVER={{SQL Server}};SERVER={0}; database={1}; \
       trusted_connection=yes;UID={2};PWD={3}".format(ServerName,MSQLDatabase,username,password))
cursor = conn.cursor()
Keith
Reply   •   7 楼
Keith    8 年前

对之前所说的话稍加补充。您可能想要返回一个数据帧。这将作为

import pypyodbc 
import pandas as pd

cnxn = pypyodbc.connect("Driver={SQL Server Native Client 11.0};"
                        "Server=server_name;"
                        "Database=db_name;"
                        "uid=User;pwd=password")
df = pd.read_sql_query('select * from table', cnxn)
Asher
Reply   •   8 楼
Asher    5 年前

我就是这样做的…

import pyodbc 
cnxn = pyodbc.connect("Driver={SQL Server Native Client 11.0};"
                      "Server=server_name;"
                      "Database=db_name;"
                      "Trusted_Connection=yes;")


cursor = cnxn.cursor()
cursor.execute('SELECT * FROM Table')

for row in cursor:
    print('row = %r' % (row,))

相关资源: