我试图使用pyodbc从SQL服务器检索数据,并使用Python将其打印在表中.但是,我似乎只能检索列名称和数据类型以及类似的东西,而不是列的每一行中的实际数据值.
基本上我试图复制一个Excel表格,检索服务器数据并将其显示在表格中.我连接到服务器没有任何问题,只是我似乎无法找到进入表中的实际数据.
这是我的代码示例:
import pyodbc
cnxn = pyodbc.connect('DRIVER={SQL Server};SERVER=SQLSRV01;DATABASE=DATABASE;UID=USER;PWD=PASSWORD')
cursor = cnxn.cursor()
cursor.execute("SELECT * FROM sys.tables")
tables = cursor.fetchall()
#cursor.execute("SELECT WORK_ORDER.TYPE,WORK_ORDER.STATUS, WORK_ORDER.BASE_ID, WORK_ORDER.LOT_ID FROM WORK_ORDER")
for row in cursor.columns(table='WORK_ORDER'):
print row.column_name
for field in row:
print field
Run Code Online (Sandbox Code Playgroud)
然而这样做的结果只是给我的东西,如表名,列名,有的整数和"无的之类的东西是不感兴趣的我:
STATUS_EFF_DATE
DATABASE
dbo
WORK_ORDER
STATUS_EFF_DATE
93
datetime
23
16
3
None
0
None
None
9
3
None
80
NO
61
Run Code Online (Sandbox Code Playgroud)
所以我不确定在哪里可以获得填充表格的值.它应该在table ='WORK_ORDER'中,但是它可以在不同的表名下吗?有没有办法打印我刚丢失的数据?
任何建议或意见将不胜感激.
跑步的时候pip install pyodbc,我明白了
In file included from .../build/pyodbc/src/buffer.cpp:12:
.../build/pyodbc/src/pyodbc.h:52:10: fatal error: 'sql.h' file not found
#include <sql.h>
^
1 error generated.
error: command 'cc' failed with exit status 1
Run Code Online (Sandbox Code Playgroud)
似乎Mavericks在/ usr/include下没有sql.h
有没有人设法安装pyodbc?有一个已知的解决方法吗?
from pandas import DataFrame
import pyodbc
cnxn = pyodbc.connect(databasez)
cursor.execute("""SELECT ID, NAME AS Nickname, ADDRESS AS Residence FROM tablez""")
DF = DataFrame(cursor.fetchall())
Run Code Online (Sandbox Code Playgroud)
这可以填充我的pandas DataFrame.但我怎么得到
DF.columns = ['ID', 'Nickname', 'Residence']
Run Code Online (Sandbox Code Playgroud)
直接从光标?该信息是否完全存储在光标中?
当我尝试使用pyodbc(在mac上)连接到sql server数据库时:
import pyodbc
server = '####'
database = '####'
username = '####@####'
password = '#####'
driver='{ODBC Driver 13 for SQL Server}'
pyodbc.connect('DRIVER='+driver+';SERVER='+server+';PORT=1443;DATABASE='+database+';UID='+username+';PWD='+password)
Run Code Online (Sandbox Code Playgroud)
我收到以下错误:
错误:('01000',"[01000] [unixODBC] [驱动程序管理器]无法打开lib'用于SQL Server的ODBC驱动程序13':找不到文件(0)(SQLDriverConnect)")
当我在实际的驱动程序位置路径时:
driver='/usr/local/lib/libmsodbcsql.13.dylib'
Run Code Online (Sandbox Code Playgroud)
它开始工作了!
我odbcinst.ini看起来像这样:
[ODBC Driver 13 for SQL Server]
Description=Microsoft ODBC Driver 13 for SQL Server
Driver=/usr/local/lib/libmsodbcsql.13.dylib
UsageCount=1
Run Code Online (Sandbox Code Playgroud)
如何让我参考driver='{ODBC Driver 13 for SQL Server}'再次开始工作?
我最初使用本指南来安装驱动程序.如果有帮助的话,我在Mac Sierra上使用anaconda?
我使用MS SQL express db.我可以连接和获取数据.但插入数据不起作用:
cursor.execute("insert into [mydb].[dbo].[ConvertToolLog] ([Message]) values('test')")
Run Code Online (Sandbox Code Playgroud)
我没有得到任何错误,但没有插入表中.在我获取数据之后,直接获取插入的行.但没有任何东西得救.
在MS SQL Server Management Studio中,插入确实有效.
我正在查询SQL数据库,我想使用pandas来处理数据.但是,我不确定如何移动数据.以下是我的输入和输出.
import pyodbc
import pandas
from pandas import DataFrame
cnxn = pyodbc.connect(r'DRIVER={Microsoft Access Driver (*.mdb, *.accdb)};DBQ=C:\users\bartogre\desktop\CorpRentalPivot1.accdb;UID="";PWD="";')
crsr = cnxn.cursor()
for table_name in crsr.tables(tableType='TABLE'):
print(table_name)
cursor = cnxn.cursor()
sql = "Select sum(CYTM), sum(PYTM), BRAND From data Group By BRAND"
cursor.execute(sql)
for data in cursor.fetchall():
print (data)
Run Code Online (Sandbox Code Playgroud)
('C:\\users\\bartogre\\desktop\\CorpRentalPivot1.accdb', None, 'Data', 'TABLE', None)
('C:\\users\\bartogre\\desktop\\CorpRentalPivot1.accdb', None, 'SFDB', 'TABLE', None)
(Decimal('78071898.71'), Decimal('82192672.29'), 'A')
(Decimal('12120663.79'), Decimal('13278814.52'), 'B')
Run Code Online (Sandbox Code Playgroud) 使用virtualenv并尝试安装pyodbc.我能找到的所有资源都声称这应该非常简单.在完成MySQL等的所有基本安装之后,只需执行以下操作:
pip install pyodbc
Run Code Online (Sandbox Code Playgroud)
但是,我看到一个非常奇怪的错误.它没有(据我所知)与丢失的库有关,并且在谷歌搜索这种错误很长一段时间之后,我根本找不到任何有建设性的东西.
(local-dev)espears@espears-w ~ $ pip install pyodbc
Downloading/unpacking pyodbc
Could not find any downloads that satisfy the requirement pyodbc
Some externally hosted files were ignored (use --allow-external pyodbc to allow).
Cleaning up...
No distributions at all found for pyodbc
Storing debug log for failure in /home/espears/.pip/pip.log
Run Code Online (Sandbox Code Playgroud)
所以我尝试使用"allow-external"选项,它没有帮助:
(local-dev)espears@espears-w ~ $ pip install --allow-external pyodbc
You must give at least one requirement to install (see "pip help install")
Run Code Online (Sandbox Code Playgroud)
但帮助文档使我看起来正确使用此选项,例如从运行的输出pip help install:
Package Index Options:
... …Run Code Online (Sandbox Code Playgroud) 我无法弄清楚以下代码有什么问题,语法是正确的(使用SQL Management Studio检查),我有访问权限因为我应该也可以这样做..但是出于某种原因,我试图创建一个表通过PyODBC然后它停止工作.
import pyodbc
def SQL(QUERY, target = '...', DB = '...'):
cnxn = pyodbc.connect('DRIVER={SQL Server};SERVER=' + target + DB+';UID=user;PWD=pass')
cursor = cnxn.cursor()
cursor.execute(QUERY)
cpn = []
for row in cursor:
cpn.append(row)
return cpn
print SQL("CREATE TABLE dbo.Approvals (ID SMALLINT NOT NULL IDENTITY PRIMARY KEY, HostName char(120));")
Run Code Online (Sandbox Code Playgroud)
它失败了:
Traceback (most recent call last):
File "test_sql.py", line 25, in <module>
print SQL("CREATE TABLE dbo.Approvals (ID SMALLINT NOT NULL IDENTITY PRIMARY KEY, HostName char(120));")
File "test_sql.py", line 20, in SQL
for …Run Code Online (Sandbox Code Playgroud) 以下作品:
import pyodbc
pyodbc.connect('DRIVER={FreeTDS};Server=my.db.server;Database=mydb;UID=myuser;PWD=mypwd;TDS_Version=8.0;Port=1433;')
Run Code Online (Sandbox Code Playgroud)
以下失败:
import sqlalchemy
sqlalchemy.create_engine("mssql://myuser:mypwd@my.db.server:1433/mydb?driver=FreeTDS& odbc_options='TDS_Version=8.0'").connect()
Run Code Online (Sandbox Code Playgroud)
上面的错误消息是:
DBAPIError :(错误)('08001','[08001] [unixODBC] [FreeTDS] [SQL Server]无法连接到数据源(0)(SQLDriverConnectW)')无无
有人可以指点我正确的方向吗?有没有办法告诉sqlalchemy将特定的连接字符串传递给pyodbc?
请注意:我希望保持此DSN-less.
下面是我想要帮助的代码.我不得不运行超过1,300,000行,这意味着插入~300,000行需要40分钟.
我认为批量插入是加速它的路线?或者是因为我通过for data in reader:部分迭代行?
#Opens the prepped csv file
with open (os.path.join(newpath,outfile), 'r') as f:
#hooks csv reader to file
reader = csv.reader(f)
#pulls out the columns (which match the SQL table)
columns = next(reader)
#trims any extra spaces
columns = [x.strip(' ') for x in columns]
#starts SQL statement
query = 'bulk insert into SpikeData123({0}) values ({1})'
#puts column names in SQL query 'query'
query = query.format(','.join(columns), ','.join('?' * len(columns)))
print 'Query is: %s' …Run Code Online (Sandbox Code Playgroud) pyodbc ×10
python ×9
sql-server ×4
pandas ×2
sql ×2
anaconda ×1
bulkinsert ×1
freetds ×1
macos ×1
odbc ×1
pip ×1
python-2.6 ×1
python-3.x ×1
sqlalchemy ×1
windows ×1