【发布时间】:2019-11-15 06:10:38
【问题描述】:
我想使用python通过sql数据库表获取非常大量的一天数据,但是花了很长时间。所以我决定获取部分数据,做一些操作并附加整个结果。为此,我获取了每小时数据,这样服务器就不会花费更长的时间。我将列表设为 l = [1,2,3,4,5,6,7,8,9,10,11,12,13,14,15,16,17,18,19,20,21, 22,23,24] 那些项目,即 1 到 24 是小时数,我已经遍历 for 循环并传递给 sql 查询以逐部分获取结果。
以下为参考代码
(我的代码):
l = [1,2,3,4,5,6,7,8,9,10,11,12,13,14,15,16,17,18,19,20,21,22,23,24]
for i in l:
quoted = urllib.parse.quote_plus('DRIVER={SQL Server};'
'SERVER=servername;'
'DATABASE=DB;'
'uid=userid;'
'pwd=****;')
engine =
create_engine('mssql+pyodbc:///odbc_connect{}'.format(quoted))
sql = "select DISTINCT a.companyid, c.RegistrationNo, c.gpsdatetime, c.GPSOdoMeter,
c.GroundSpeed, c.TxnReason from Vehicle_Master a with(nolock), GPSEventsData c
with(nolock) where a.RegistrationNo = c.RegistrationNo and a.companyid = c.customerid and
a.active = 1 and c.gpsdatetime >= DATEADD(day, DATEDIFF(day, 0, GETDATE()) - 1, 0) and DATEPART(HOUR, c.gpsdatetime) = i ORDER BY gpsdatetime"
df1 = pd.read_sql_query(sql, engine)"
df1['ChangeInTime'] = df1.groupby('RegistrationNo')['GPSDateTime'].apply(lambda x: x -
x.shift(1))
df1['GroundSpeed'] = df1['GroundSpeed']*(5/18)
df1['ChangeInTimeInSec'] = df1['ChangeInTime'].dt.total_seconds()
df1['ChangeInSpeed'] = df1.groupby('RegistrationNo')['GroundSpeed'].apply(lambda x: x -
x.shift(1))
df1['Acceleration'] = df1['ChangeInSpeed']/df1['ChangeInTimeInSec']
df1.to_sql(name="Accelerations_Breaking",schema = 'dbo', con = engine,if_exists =
'append',index=False)
以下是它正在抛出的错误:
ProgrammingError: (pyodbc.ProgrammingError) ('42S22', "[42S22] [Microsoft][ODBC SQL Server Driver][SQL Server]Invalid column name 'i'. (207) (SQLExecDirectW)") [SQL: select DISTINCT a.companyid, c.RegistrationNo, c.gpsdatetime, c.GPSOdoMeter, c.GroundSpeed, c.TxnReason from Vehicle_Master a with(nolock), GPSEventsData c with(nolock) where a.RegistrationNo = c.RegistrationNo和 a.companyid = c.customerid 和 a.active = 1 和 c.gpsdatetime >= DATEADD(MONTH, DATEDIFF(MONTH, 0, GETDATE()) - 1, 0) 和 DATEPART(HOUR, c.gpsdatetime) = i按 gpsdatetime 订购] (此错误的背景:http://sqlalche.me/e/f405)
我不知道我哪里错了。
请帮忙!!
【问题讨论】:
标签: python sql python-3.x python-2.7 python-requests