标签: pyodbc

使用带有'Windows凭据'的Linux上的python连接到MS SQL Server

有没有办法使用Windows Domain Credentials在Linux上使用python连接到MS SQL Server数据库?

我可以使用Windows凭据从我的Windows机器上完美地连接,但尝试使用pyodbs + freetds + unixodbc从linux python中做同样的事情

>>import pyodbc
>>conn = pyodbc.connect("DRIVER={FreeTDS};SERVER=servername;UID=username;PWD=password;DATABASE=dbname")
Run Code Online (Sandbox Code Playgroud)

导致此错误:

class 'pyodbc.Error'>: ('28000', '[28000] [unixODBC][FreeTDS][SQL Server]Login incorrect. (20014) (SQLDriverConnectW)')
Run Code Online (Sandbox Code Playgroud)

我确定密码写得正确,但我尝试了很多不同的用户名组合:

DOMAIN\username
DOMAIN\\username
Run Code Online (Sandbox Code Playgroud)

甚至

UID=username;DOMAIN=domain
Run Code Online (Sandbox Code Playgroud)

无济于事.有任何想法吗?

python sql-server unixodbc pyodbc freetds

7
推荐指数
2
解决办法
2万
查看次数

跟进:从python执行.sql文件

一年多以前,有人问过这个问题:执行.sql文件,用于在python中的SQL Management Studio中运行.

我正在python中编写一个连接到SQL服务器的脚本,并根据大(几GB).sql文件中的SQL命令创建和填充数据库.

看起来SQLCMD需要下载并安装SQL Server Express.有没有其他方法从python执行.sql文件,而不需要使用我的脚本的每个人下载和安装SQL Server?pyodbc有这种能力吗?

编辑:

这是另一个类似的问题: 使用python MySQLdb执行*.sql文件

在这里,解决方案是从命令(在本例中为mysql.exe)调用实用程序,并将该文件作为参数列出.

在我看来应该有一种方法来使用Python的DB API库之一,但我还没有找到它所以我正在寻找像我可以用来运行文件的SQLCMD或MYSQL这样的*.exe从命令行.

PS如果我没有正确地看这个,请随时纠正我.也许下面的代码与从命令行运行一样有效:

for line in open('query.sql','r'):
    cursor.execute(line)
Run Code Online (Sandbox Code Playgroud)

python sql sql-server pyodbc python-db-api

7
推荐指数
1
解决办法
2万
查看次数

如何使用Windows身份验证从Python中的另一个域的Windows工作站连接到MS SQL服务器

我试图连接到SQL server 2000安装在Windows server 2003Windows Server 2008 R2使用Python 3.4pyodbc模块.这些服务器位于不同的AD域中.Windows only在SQL Server上启用了身份验证,我无法更改它.

drv = '{SQL server}'
svr = 'sql.my-domain.local'
usr = 'my-domain.local\testuser'
pwd = 'password'
db = 'testdb'
pyodbc.connect(driver=drv, server=svr, user=usr, password=pwd, database=db)
Run Code Online (Sandbox Code Playgroud)

上面的连接失败,出现以下错误:

pyodbc.Error: ('28000', "[28000] [Microsoft][ODBC SQL Server Driver][SQLServer] 
Login failed for user 'svx-iroot.local\\sqlexecutive'. 
Reason: Not associated with a trusted SQL Server connection. (18452) (SQLDriverConnect)")
Run Code Online (Sandbox Code Playgroud)

有一些问题,例如这一个,建议在连接中添加trusted_connection='yes'参数以pyodbc支持Windows身份验证,但在这种情况下它没有用,因为使用此选项使用本地凭据并且我需要明确提供凭据,因为发起工作站位于不同的AD域.

使用驱动程序创建User DSNin 失败,并出现上述相同的错误. …

python sql-server odbc pyodbc freetds

7
推荐指数
1
解决办法
3582
查看次数

从 pd.read_sql 输出附加到 Pandas 数据帧

我来自 R,但由于各种原因需要在 Python 中执行此操作。这很可能是我的 Python 的基本 PEBKAC 问题,而不是 Pandas、PyODBC 或其他任何东西。

请多多包涵。

我当前的 Python 3 代码:

import pandas as pd
import pyodbc 
cnxn = pyodbc.connect(DSN="databasename", uid = "username", pwd = "password")

querystring = 'select order_number, creation_date from table_name where order_number = ?'

orders = ['1234',
'2345',
'3456',
'5678']

for i in orders:
   print(pd.read_sql(querystring, cnxn, params = [i]))
Run Code Online (Sandbox Code Playgroud)

我需要的是一个列名为“order_number”和“creation_date”的数据框。

代码输出的是: 在此处输入图片说明

抱歉截屏,无法在此处获取格式。

阅读dataframe.append page 后,我尝试了这个:

df = pd.DataFrame()

for i in orders:
       df.append(pd.read_sql(querystring, cnxn, params = [i]))
Run Code Online (Sandbox Code Playgroud)

这似乎运行良好(无论如何都没有抛出错误)。

但是当我尝试输出 df 时,我得到 …

python pyodbc dataframe pandas

7
推荐指数
1
解决办法
4253
查看次数

Linux Python Azure功能APP - 尽管在requirements.txt和其他模块工作正常,但找不到pyodbc模块

我正在使用一个Linux consumption计划.

我收到以下错误; Exception: ModuleNotFoundError: No module named 'pyodbc'

我已经pyodbcrequirements.txt文件中添加了这个文件中的其他模块,比如azure-storage工作正常.

有没有人看过这个问题或者可以证实这是一个已知的bug?我看不到任何手动安装它的方法.

python pyodbc azure-functions

7
推荐指数
1
解决办法
595
查看次数

Python pyodbc Unicode 问题

我有一个字符串变量 res,它是从 pyodbc 游标派生的,如底部所示。该表test有一行数据,ä其 unicode 代码点为u'\xe4'

我得到的结果是

>>> res,type(res)
('\xe4', <type 'str'>)
Run Code Online (Sandbox Code Playgroud)

而我应该得到的结果是。

>>> res,type(res)
(u'\xe4', <type 'unicode'>)
Run Code Online (Sandbox Code Playgroud)

我尝试将字符集作为 utf-8 添加到我的 pyodbc 连接字符串中,如下所示。结果现在已正确设置为 unicode,但代码点用于其他字符串?,这可能是由于 pyodbc 驱动程序中可能存在的错误。

conn = pyodbc.connect(DSN='datbase;charset=utf8',ansi=True,autocommit=True)
>>> res,type(res)
(u'\ua4c3', <type 'unicode'>)
Run Code Online (Sandbox Code Playgroud)

实际代码

import pyodbc
pyodbc.pooling=False
conn = pyodbc.connect(DSN='datbase',ansi=True,autocommit=True)
cursor = conn.cursor()
cur = cursor.execute('SELECT col1 from test')
res = cur.fetchall()[0][0]
print(res)
Run Code Online (Sandbox Code Playgroud)

其他详细信息 数据库:Teradata pyodbc 版本:2.7

那么我现在如何

1)投射('\xe4', <type 'str'>)(u'\xe4', <type 'unicode'>)(是否可以在没有无意副作用的情况下做到这一点?)

2) 解决 pyodbc/unixodbc 问题

python unicode odbc utf-8 pyodbc

6
推荐指数
2
解决办法
1万
查看次数

加速从 pyodbc 插入 SQL Server

在 中python,我有一个从一个数据库 ( Redshiftvia psycopg2) 中选择数据的过程,然后将该数据插入SQL Server(via pyodbc)。我选择进行读/写而不是读/平面文件/加载,因为每天的行数约为 100,000。似乎更容易简单地连接和插入。但是 - 插入过程很慢,需要几分钟。

有没有更好的方法使用 Pyodbc 将数据插入 SQL Server?

select_cursor.execute(output_query)

done = False
rowcount = 0

while not done:
    rows = select_cursor.fetchmany(10000)

    insert_list = []

    if rows == []:
        done = True
        break

    for row in rows:
        rowcount += 1

        insert_params = (
            row[0], 
            row[1], 
            row[2]
            )

        insert_list.append(insert_params)            

    insert_cnxn = pyodbc.connect('''Connection Information''')

    insert_cursor = insert_cnxn.cursor()

    insert_cursor.executemany("""
        INSERT INTO Destination (AccountNumber, OrderDate, Value)
        VALUES (?, ?, ?) …
Run Code Online (Sandbox Code Playgroud)

python sql-server pyodbc

6
推荐指数
1
解决办法
2万
查看次数

使用 SQLAlchemy 时 pandas.read_sql() 比 pyodbc 慢得多

我正在尝试从 SQL 读取一个小表,并且正在考虑从 pyodbc 切换到 SQLAlchemy 以便能够使用 pd.to_sql()

当我比较两者时,sql alchemy 慢得多。

s_py = """\
import pandas as pd
import pyodbc
cxn = pyodbc.connect('DRIVER={SQL SERVER};SERVER=.\;DATABASE=PPIS;UID=sa;PWD=pwd')
"""

s_alch = """\
import pandas as pd
import sqlalchemy
cxn = sqlalchemy.create_engine("mssql+pyodbc://sa:pwd@./PPIS?driver=SQL+Server")
"""
timeit.timeit('pd.read_sql("SELECT * FROM Operators", cxn)',setup=s_py, number=100)
Run Code Online (Sandbox Code Playgroud)

输出[21]:0.18496091418973037

timeit.timeit('pd.read_sql("SELECT * FROM Operators", cxn)',setup=s_alch, number=100)
Run Code Online (Sandbox Code Playgroud)

输出[23]:4.407356934717654

我见过这个谈论插入行。但为什么读取速度会慢很多呢?

python sqlalchemy pyodbc pandas

6
推荐指数
0
解决办法
2420
查看次数

使用 MFA Active Directory 交互式身份验证在 Python 中连接到 Azure SQL,而不使用 Microsoft.IdentityModel.Clients.ActiveDirectory dll

要使用 MFA(在 SSMS 中作为“Active Directory - Universal”)连接到 Azure SQL 数据库,Microsoft 建议并且目前只有使用 Microsoft.IdentityModel.Clients.ActiveDirectory 与 C# 连接的教程

Authentication='Active Directory Interactive';从 Python 或 Powershell设置常规 ODBC 连接字符串会导致错误

Cannot find an authentication provider for 'ActiveDirectoryInteractive'
Run Code Online (Sandbox Code Playgroud)

这似乎是因为根据https://docs.microsoft.com/en-us/azure/sql-database/active-directory-interactive-connect-azure-sql-db 上的Microsoft 示例代码,您需要明确创建自己的创建连接时的身份验证提供程序类:


        public static void Main(string[] args)
        {
            var provider = new ActiveDirectoryAuthProvider();

            SC.SqlAuthenticationProvider.SetProvider(
                SC.SqlAuthenticationMethod.ActiveDirectoryInteractive,
                //SC.SqlAuthenticationMethod.ActiveDirectoryIntegrated,  // Alternatives.
                //SC.SqlAuthenticationMethod.ActiveDirectoryPassword,
                provider);

            Program.Connection();
        }
Run Code Online (Sandbox Code Playgroud)

我想与pyodbc 连接,所以我无法实现ActiveDirectoryInteractive 提供程序。

有什么方法可以使用 OAuth 获取令牌并在连接字符串中使用它,或者在不使用 .NET 的情况下以其他方式实现 ActiveDirectoryInteractive 提供程序?

odbc azure pyodbc azure-sql-database multi-factor-authentication

6
推荐指数
2
解决办法
4906
查看次数

SystemError: &lt;class 'pyodbc.Error'&gt; 返回一个带有错误集的结果

def insert(self):
    conn = pyodbc.connect(
        'Driver={SQL Server};'
        'Server=DESKTOP-S0VG212\SQLEXPRESS;'
        'Database=MovieGuide;'
        'Trusted_Connection=yes;'
    )
    cursor = conn.cursor()
Run Code Online (Sandbox Code Playgroud)

执行查询时发生错误,但我不知道是什么原因造成的。

cursor.execute('insert into Movies(MovieName,Genre,Rating,Username) values(?,?,?,?);',
               (self.moviename, self.moviegenre, self.ratebox, self.username))
conn.commit()
Run Code Online (Sandbox Code Playgroud)

python sql-server pyodbc

6
推荐指数
1
解决办法
4598
查看次数