Как сжать код «pymssql запроса данных из sql в dataframe»? - PullRequest
0 голосов
/ 28 июня 2019

Я пишу некоторый код для чтения данных из базы данных сервера SQL и нахожу код работающим. Код выглядит некрасиво. Я надеюсь, что экспорт может дать мне подсказку и научить писать лучший код.

Этот код работает нормально. Но я беспокоюсь, что если база данных огромна, как миллион строк Добавление данных в Dict займет много времени. Однако я не знаю, как сделать это более эффективным. Более того, есть ли лучший способ построить нужный мне фрейм данных? Могу ли я не использовать dict? Заранее большое спасибо. Я с нетерпением жду, чтобы услышать.


import pandas as pd
col=['code','desc','group_n']
Dict={}
for i in range(len(col)):
    Dict[col[i]]=[]
with pymssql.connect(server,sqluser,sqlpass,database) as conn:
    with conn.cursor() as cursor:
        sql = 'select VENDORCODE,VENDORDESCRIPTION,sgp.Name from STATUSCODEMAPPING as mapping 
        join STATUSCODESET as sset on mapping.STATUSCODESETID=sset.ID
        join STATUSCODEGROUP as sgp on sgp.ID=mapping.GROUPID where sset.ID = %d
        ORDER BY VENDORCODE'
        cursor.execute(sql,(238473))
        row = cursor.fetchone()
        while row:
            #print (str(row[0]) + ':  ' + row[1] + '     '+row[2])
            [Dict[col[i]].append(row[i]) for i in range(len(row))]
            row = cursor.fetchone()
df_scmap=pd.DataFrame(Dict)
df_scmap.set_index(['code'],inplace=True)
df_scmap.info()
<class 'pandas.core.frame.DataFrame'>
Int64Index: 595 entries, 1 to 850903
Data columns (total 2 columns):
desc       595 non-null object
group_n    595 non-null object
dtypes: object(2)
memory usage: 13.9+ KB

1 Ответ

0 голосов
/ 04 июля 2019

fetchall () выглядит намного лучше

import pandas as pd
col=['code','desc','group_n']
with pymssql.connect(server,sqluser,sqlpass,database) as conn:
    with conn.cursor() as cursor:
        sql = 'select almhis.ID, almhis.ACTIVETIME, alm.ALARMCODE, alm.VENDORCODE,  coler.NAME
        from dbo.ALARM as alm JOIN dbo.ALARMHISTORY as almhis ON almhis.ALARMID = alm.ID 
        JOIN dbo.CONTROLLER as coler ON coler.ID = alm.CONTROLLERID'
        cursor.execute(sql)
        row = cursor.fetchall()
        df_almhis=pd.DataFrame(row,columns=cols)
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...