如何压缩代码'pymssql查询数据从sql到dataframe'?
Posted
技术标签:
【中文标题】如何压缩代码\'pymssql查询数据从sql到dataframe\'?【英文标题】:How to compact code 'pymssql query data from sql to dataframe'?如何压缩代码'pymssql查询数据从sql到dataframe'? 【发布时间】:2019-06-28 03:42:22 【问题描述】:我编写了一些代码来从 sql server 数据库中读取数据并发现代码工作正常。代码看起来很难看。我希望 export 能给我一些提示并指导如何编写更好的代码。
此代码运行良好。但我担心如果数据库像一百万行一样巨大。将数据附加到 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
【问题讨论】:
与其循环遍历行,不如直接使用df_scmap = pd.read_sql_query(sql, conn, params=(238473,))
...?
是的 fetchall 很方便。但是查询一个包含超过 1000 万行的大表需要很多时间。(至少 SQL Server 脚本需要大量时间和内存)。所以我认为从数据库中循环遍历行(一个或固定大小的行)会更好。
【参考方案1】:
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)
【讨论】:
以上是关于如何压缩代码'pymssql查询数据从sql到dataframe'?的主要内容,如果未能解决你的问题,请参考以下文章
Pymssql 可以与 MS SQL Server 建立安全连接 (SSL) 吗?