Я пытаюсь перенести код R на Python 2.7, чтобы сравнить оба. Первая проблема, которую я получаю, это когда я пытаюсь установить соединение odbc. R намного быстрее, чем Python, но, поскольку я новичок в Python, я не уверен, что использую правильный пакет.
В Р я пишу:
ptm <- proc.time()
require(RODBC)
dbXX <- odbcDriverConnect('driver={SQL Server};
server=s001111;database=XX;trusted_connection=true')
rech<-sqlQuery(dbXX, "select top 10000* from XX.dbo.table ", as.is=T)
proc.time() - ptm
и я получаю:
> proc.time() - ptm
user system elapsed
2.47 0.11 2.87
Я скачал Anaconda для python 2.7 windows 7 64. Итак, в Spyder я пишу:
import pyodbc
import pandas
from pandas.io.sql import read_frame
sql = 'select top 10000 * from XX.dbo.table'
cnn = pyodbc.connect('DRIVER={SQL Server};SERVER=s001111;DATABASE=XX;Trusted_Connection=yes')
start = time.time()
data=pd.read_sql(sql,cnn)
end = time.time()
print(end - start)
Это занимает 6,35 секунды
Я также пробовал с pymssql:
import pymssql
conn = pymssql.connect(server='s001111', database='XX')
start = time.time()
data=pd.read_sql(sql,conn)
end = time.time()
print(end - start)
Это занимает 38,3 секунды!
Реальный запрос должен прочитать таблицу, размерность которой составляет 220 000 строк на 353 столбца, и применить фильтр (где).
Мне нужно только извлекать данные из БД.
Есть ли способ сделать это быстрее в Python 2.7?
Я обнаружил отношение использования pyodbc-memory, вызванное SQL Server, но я думаю, что если бы это было проблема SQL будет делать то же самое в R, не так ли?
Я также нашел это: IOPro но это не бесплатно!
В этот момент мне было интересно, была ли проблема в соединении ODBC или в самих пандах, поэтому я попробовал:
cur = conn.cursor();
start = time.time()
cur.execute(sql);
tabla=cur.fetchall()
end = time.time()
print(end - start)
Но это заняло 29,29 секунды.
Итак, тем не менее: как возможно, что R намного быстрее, чем Python, извлекает данные из базы данных SQL Microsoft?
pymssql
(pypi.python.org/pypi/pymssql/2.1.1 а>). См. также список здесь: docs.sqlalchemy.org/en/relpymssql
0/dialects/ mssql.html - person joris   schedule 02.02.2016read_frame
устарело, вместо него следует использоватьpd.read_sql
. Я также рекомендую использоватьSQLAlchemy
для указания соединения (но это не зависит от используемого вами драйвера). См. pandas.pydata.org/pandas-docs/stable/io. .html#sql-запросы - person joris   schedule 02.02.2016%time
(например,%time pd.read_sql(...)
) - person joris   schedule 02.02.2016cur = conn.cursor(); cur.execute(sql); cur.fetchall()
и сравнить его со временем получения этого запроса с помощью pandas. - person joris   schedule 02.02.2016