标签: pyodbc

pyodbc比pypyodbc有任何设计优势吗?

我知道pyodbc是一个较旧的项目,可能更具特色和强大,但它的设计是什么(基于编译的C代码的组件),这会使它优于纯Python实现,如pypyodbc

我做了很多ETL工作,并且正在考虑从Linux/Jython/JDBC方法切换到Windows/Cygwin/Python/ODBC方法.

python odbc etl pyodbc pypyodbc

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

pyodbc - 如何使用参数的变量执行select语句

我试图遍历名为Throughput的表中的所有行,但是对于特定的DeviceName(我已经存储在data ['DeviceName']中.我尝试了以下内容,但它不起作用:

for row in cursor.execute("select * from Throughput where DeviceName=%s"), %(data['DeviceName']):
Run Code Online (Sandbox Code Playgroud)

编辑:也试过这个,但它不起作用:

for row in cursor.execute("select * from Throughput where(DeviceName), values(?)", (data['DeviceName']) ):
Run Code Online (Sandbox Code Playgroud)

EDIT2:我最终工作代码的片段:

query = "select * from Throughput where DeviceName = '%s'" % data['Device Name']
      try:
          for row in cursor.execute(query):
Run Code Online (Sandbox Code Playgroud)

python sql variables select pyodbc

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

如何捕获特定的pyodbc错误消息

我做了以下代码,

import pyodbc
try:
    pyodbc.connect('DRIVER={%s};SERVER=%s;DATABASE=%s;UID=%s;PWD=%s' % (driver, server, database, uid, password))
except pyodbc.Error, err:
    logging.warn(err)
Run Code Online (Sandbox Code Playgroud)

我得到的错误消息格式是

('HY000', "[HY000] [MySQL][ODBC 5.1 Driver]Access denied for user 'root'@'192.168.2.27' (using password: YES) (1045) (SQLDriverConnect)")
Run Code Online (Sandbox Code Playgroud)

我想只收到错误的消息部分即

Access denied for user 'root'@'192.168.2.27'(using password: YES)
Run Code Online (Sandbox Code Playgroud)

我不知道我是否可以特别注意错误,找不到驱动程序,主机关闭等等.

我也尝试捕获错误:

 except pyodbc.OperationalError, err:
    logging.warn(err)
except pyodbc.DataError, err:
    logging.warn(err)
except pyodbc.IntegrityError, err:
    logging.warn(err)
except pyodbc.ProgrammingError, err:
    logging.warn(err)
except pyodbc.NotSupportedError, err:
    logging.warn(err)
except pyodbc.DatabaseError, err:
    logging.warn(err)
except pyodbc.Error, err:
    logging.warn(err)
Run Code Online (Sandbox Code Playgroud)

但最后一个总是捕获错误.

Fruthermore我看到pyodbc.Error.message总是空的.我怎样才能在错误中得到消息.

谢谢

python odbc pyodbc

13
推荐指数
3
解决办法
3万
查看次数

PYODBC到Pandas - DataFrame不工作 - 传递值的形状是(x,y),索引暗示(w,z)

之前我使用pyodbc和python但现在我已经将它安装在一台新机器上(win 8 64 bit,Python 2.7 64 bit,PythonXY with Spyder).

在我习惯之前(在底部你可以找到更多真实的例子):

columns = [column[0] for column in cursor.description]
temp = cursor.fetchall()
data = pandas.DataFrame(temp,columns=columns)
Run Code Online (Sandbox Code Playgroud)

它会工作正常.现在,似乎DataFrame无法再从光标提取的数据进行转换.它返回:

传递值的形状是(x,y),指数暗示(w,z)

我有点看问题在哪里.基本上,想象一下我只获取一行.然后DataFrame想要塑造它(1,1),只有一个元素.虽然我想(1,X),其中X是列表的长度.

我不确定为什么行为改变了.也许它是我拥有的Pandas版本,或pyodbc,但更新是有问题的.我试图更新一些模块,但它搞砸了一切,我使用的任何方法(二进制文件 - 用于正确的机器/安装 - 点子安装,易于安装,任何东西等等......这确实非常令人沮丧.我可能会避免从现在开始为Python赢取8位64位.

真实的例子:

sql = 'Select * form TABLE'
cursor.execute(sql)
columns = [column[0] for column in cursor.description]
data    = cursor.fetchall()
        con.close()
            results = DataFrame(data, columns=columns)
Run Code Online (Sandbox Code Playgroud)

返回: * ValueError:传递值的形状为(1,1540),索引暗示(51,1540)

请注意:

ipdb> type(data)
<type 'list'>
ipdb> np.shape(data)
(1540, 51)
ipdb> type(data[0])
<type 'pyodbc.Row'>
Run Code Online (Sandbox Code Playgroud)

现在,例如,如果我们这样做:

ipdb> DataFrame([1,2,3],columns=['a','b','c'])
Run Code Online (Sandbox Code Playgroud)

* ValueError:传递值的形状为(1,3),索引意味着(3,3)

如果我们这样做:

ipdb> DataFrame([[1,2,3]],columns=['a','b','c'])
Run Code Online (Sandbox Code Playgroud)

abc 0 …

python 64-bit pyodbc pandas windows-8

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

使用python将csv文件写入SQL Server数据库

您好我正在尝试使用python将csv文件写入SQL Server数据库中的表.我传递参数时遇到错误,但手动操作时我没有遇到任何错误.这是我正在执行的代码.

cur=cnxn.cursor() # Get the cursor
csv_data = csv.reader(file(Samplefile.csv')) # Read the csv
for rows in csv_data: # Iterate through csv
    cur.execute("INSERT INTO MyTable(Col1,Col2,Col3,Col4) VALUES (?,?,?,?)",rows)
cnxn.commit()
Run Code Online (Sandbox Code Playgroud)

错误:pyodbc.DataError:('22001','[22001] [Microsoft] [ODBC SQL Server驱动程序] [SQL Server]字符串或二进制数据将被截断.(8152)(SQLExecDirectW); [01000] [Microsoft] [ ODBC SQL Server驱动程序] [SQL Server]语句已终止.(3621)')

但是,当我手动插入值时.它工作正常

cur.execute("INSERT INTO MyTable(Col1,Col2,Col3,Col4) VALUES (?,?,?,?)",'A','B','C','D')
Run Code Online (Sandbox Code Playgroud)

我确保数据库中存在TABLE,数据类型与我传递的数据一致.连接和光标也正确.行的数据类型是"列表"

python sql-server csv pyodbc

13
推荐指数
1
解决办法
5万
查看次数

在非Windows平台(Linux或Mac)上使用Python中的Access数据库

我想访问Microsoft Access数据库中的数据.我有一些.accdb和.mdb文件,想要用Python读取它们.

根据我的研究,pyodbc只能在Windows平台上使用,但我在Mac OS X上工作.我是Python的新手.

另一种选择是如果我可以将数据从数据库导出到csv然后在python中使用.

任何帮助或开始将受到高度赞赏.

python macos ms-access odbc pyodbc

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

使用Python的SQL Server存储过程(pyodbc)

我有一个存储过程,代码:

DECLARE @RC int 
DECLARE @id varchar(13) 
DECLARE @pw varchar(13) 
DECLARE @depart varchar(32) 
DECLARE @class varchar(12) 
DECLARE @name varchar(12) 
DECLARE @birthday varchar(10) 
DECLARE @grade int 
DECLARE @subgrade int 
SELECT @id = 'test' 
SELECT @pw = '12345' 
SELECT @depart = 'none' 
SELECT @class = 'GM' 
SELECT @name = 'name' 
SELECT @birthday = 'None' 
SELECT @grade = 3 
SELECT @subgrade = 2 
EXEC @RC = [my_database].[dbo].[my_table] @id, @pw, @depart, @class, @name, @birthday, @grade, @subgrade 
DECLARE @PrnLine nvarchar(4000) 
PRINT 'Stored Procedure: my_database.dbo.my_table' 
SELECT …
Run Code Online (Sandbox Code Playgroud)

python sql-server pyodbc

13
推荐指数
5
解决办法
3万
查看次数

将pyodbc连接到Postgres

尝试使用pyodbc连接到Postgres.

我可以用isql连接到DB:

echo "select 1" | isql -v my-connector
Run Code Online (Sandbox Code Playgroud)

返回:

+---------------------------------------+
| Connected!                            |
|                                       |
| sql-statement                         |
| help [tablename]                      |
| quit                                  |
|                                       |
+---------------------------------------+
SQL> select 1
+------------+
| ?column?   |
+------------+
| 1          |
+------------+
SQLRowCount returns 1
1 rows fetched
Run Code Online (Sandbox Code Playgroud)

但是当我尝试连接pyodbc时:

import pyodbc
con = pyodbc.connect("DRIVER={PostgreSQL Unicode}; DATABASE=<dbname>;     UID=<username>; PWD=<password>; SERVER=localhost; PORT=5432;")
Run Code Online (Sandbox Code Playgroud)

我收到以下错误:

pyodbc.Error: ('08001', '[08001] [unixODBC]connction string lacks some options (202) (SQLDriverConnect)')
Run Code Online (Sandbox Code Playgroud)

obdc.ini文件如下所示:

[my-connector]
Description         = PostgreSQL connection to '<dbname>' database
Driver …
Run Code Online (Sandbox Code Playgroud)

postgresql pyodbc python-3.x ubuntu-14.04

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

错误28000:使用pyodbc的用户DOMAIN \\用户登录失败

我试图使用Python通过使用Window身份验证连接到SQL数据库.我在这里查看了一些帖子(例如,这里),但建议的方法似乎不起作用.

例如,我使用了以下代码:

cnxn = pyodbc.connect(driver='{SQL Server Native Client 11.0}',
                      server='SERVERNAME', 
                      database='DATABASENAME',               
                      trusted_connection='yes')
Run Code Online (Sandbox Code Playgroud)

但是我收到以下错误:

Error: ('28000', "[28000] [Microsoft][SQL Server Native Client 11.0][SQL Server]
Login failed for user 'DOMAIN\\username'. (18456) (SQLDriverConnect); [28000] [Microsoft]
[SQL Server Native Client 11.0][SQL Server]Login failed for user 'DOMAIN\\username'. 
(18456)") 
Run Code Online (Sandbox Code Playgroud)

(请注意,我在上面的错误消息中分别用DOMAIN和替换了实际的域名和用户名username.)

我用我也试过UIDPWD,这就导致了同样的错误.

最后,我试图通过以下从上面的链接的建议,更改服务帐户,但我的电脑上,没有Log On标签,当我去Propertiesservices.msc.

我想知道我做错了什么以及如何解决这个问题.

python sql-server pyodbc

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

使用pyodbc将docker python连接到SQL服务器

我正在尝试连接在docker容器中运行的pyodbc python脚本以登录到MSSQL数据库我已经尝试了各种docker文件,但是无法建立连接(在构建docker或python尝试连接时失败),有没有人有一个工作的dockerfile,使用pyodbc:

Dockerfile:

# Use an official Python runtime as a parent image
FROM python:2.7-slim

# Set the working directory to /app
WORKDIR /app

# Copy the current directory contents into the container at /app
ADD . /app

# Install any needed packages specified in requirements.txt
RUN pip install -r requirements.txt

# Run app.py when the container launches
CMD ["python", "App.py"]
Run Code Online (Sandbox Code Playgroud)

requirements.TXT

pyodbc
Run Code Online (Sandbox Code Playgroud)

App.Py

import pyodbc

connection = pyodbc.connect('Driver={SQL Server};'
                            'Server=xxxx;'
                            'Database=xxx;'
                            'UID=xxxx;'
                            'PWD=xxxx')

cursor = connection.cursor()

cursor.execute("SELECT [Id],[Name] FROM …
Run Code Online (Sandbox Code Playgroud)

pyodbc docker dockerfile

12
推荐指数
6
解决办法
8340
查看次数