我试图遍历名为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) 我做了以下代码,
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总是空的.我怎样才能在错误中得到消息.
谢谢
之前我使用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将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,数据类型与我传递的数据一致.连接和光标也正确.行的数据类型是"列表"
我想访问Microsoft Access数据库中的数据.我有一些.accdb和.mdb文件,想要用Python读取它们.
根据我的研究,pyodbc只能在Windows平台上使用,但我在Mac OS X上工作.我是Python的新手.
另一种选择是如果我可以将数据从数据库导出到csv然后在python中使用.
任何帮助或开始将受到高度赞赏.
我有一个存储过程,代码:
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) 尝试使用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) 我试图使用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.)
我用我也试过UID和PWD,这就导致了同样的错误.
最后,我试图通过以下从上面的链接的建议,更改服务帐户,但我的电脑上,没有Log On标签,当我去Properties的services.msc.
我想知道我做错了什么以及如何解决这个问题.
我正在尝试连接在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 ×10
python ×8
odbc ×3
sql-server ×3
64-bit ×1
csv ×1
docker ×1
dockerfile ×1
etl ×1
macos ×1
ms-access ×1
pandas ×1
postgresql ×1
pypyodbc ×1
python-3.x ×1
select ×1
sql ×1
ubuntu-14.04 ×1
variables ×1
windows-8 ×1