2016-04-14 19 views
0

setleri yerel bir sql sunucusunda bir saklı yordam, bu çoklu veri setleri/tablolarıPandalar IO SQL ve çoklu sonuçla saklı yordam Yani

döndürür var

Normalde piton/pyodbc ben kullanırım

cursor.nextset() 
subset1 = cursor.fetchall() 
cursor.nextset() 
subset2 = cursor.fetchall() 

ps.io.sql.read_sql dosyasını kullanmak ve saklı yordamları birden çok sonuç kümesiyle birlikte veri karelerine dönüştürmek istiyorum, ancak imleci nasıl hareket ettireceğine ve bir şeyleri kapatmadan önce daha fazla bilgi almanıza yardımcı olan hiçbir şey bulamıyorum. .

import pandas as ps 

query = "execute raw.GetDetails @someParam = '118'" 
conn = myConnection() #connection,cursor 

results = ps.io.sql.read_sql(query, con=conn[0]) 

results.head() 

conn[1].close() 

cevap

0

şu çalışmalıdır:

import pandas as pd 
from sqlalchemy import create_engine 

engine = create_engine('mysql://{}:{}@{}/{}'.format(username, password, server, database_name)) 
connection = engine.connect().connection 
cursor = self.connection.cursor() 

cursor.execute('call storedProcName(%s, %s, ...)', params) 

# Results set 1 
column_names = [col[0] for col in cursor.description] # Get column names from MySQL 

df1_data = [] 
for row in cursor.fetchall(): 
    df1_data.append({name: row[i] for i, name in enumerate(column_names)}) 

# Results set 2 
cursor.nextset() 
column_names = [col[0] for col in cursor.description] # Get column names from MySQL 

df2_data = [] 
for row in cursor.fetchall(): 
    df2_data.append({name: row[j] for j, name in enumerate(column_names)}) 

cursor.close() 

df1 = pd.DataFrame(df1_data) 
df2 = pd.DataFrame(df2_data) 

Düzenleme: el sütun adlarını belirtmek zorunda kalmamak için kodu buraya güncelledik.

Özgün sorunun yalnızca belirli bir SQL sunucusu türü değil, bir "yerel SQL sunucusu" belirttiğini unutmayın. Bu cevap MySQL ile çalışıyor, ancak başka bir çeşitle test etmedim.

+0

Bu işe yarayacakken, bir sqlalchemy bağımlılığı sunuyor ve aynı zamanda bir mysql sunucusuna başvuruyor gibi görünüyor? Veritabanına standart olarak (http://pandas.pydata.org/pandas-docs/stable/io.html#sql-queries) veri aktarmak için – Mdev

+0

'sqlalchemy' gereklidir. Çoklu sonuç kümeleri için, çoğu kişi için 'sqlalchemy' işlevini kullanmanız mantıklı olacaktır. Bununla birlikte, bu cevaba ait metodolojiyi veritabanına bağlanmak için farklı bir yöntemle kullanmak önemsiz olmalıdır. "Bir mysql sunucusuna başvurma" ile ilgili olarak, lütfen http://docs.sqlalchemy.org/en/latest/core/engines.html#database-urls adresini ziyaret edin. –

İlgili konular