我已经写了一个代码,我想传递3个命令行或系统参数到sql查询,这是在我所做的函数内。系统参数应该首先传递给函数参数,然后这些参数将传递给函数中的sql查询。这些参数将为该sql查询提供条件。例如:如果我只想获取部门id为1的一月数据,那么命令行参数将是该月份和部门id
我试图从命令行传递agruments,但它将我的文件名作为第一个系统参数。你知道吗
(我的代码):
def main(mon,Id):
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 a.companyid,CAST(c.gpsdatetime AS DATE) AS GPSDate,
AVG(c.tempanalog1) AS AverageTemperature from Vehicle_Master
a,GPSEventsData c with(nolock) where a.companyid = c.customerid
AND datepart(month,gpsdatetime) = "+str(mon)+" AND
DATEPART(dw,c.gpsdatetime) != 1 AND a.VehicleID = "+str(Id)+"
GROUP BY a.companyid, CAST(c.gpsdatetime AS DATE) ORDER BY
GPSDate"
df = pd.read_sql_query(sql, engine)
df['GPSDate'] = pd.to_datetime(df['GPSDate'])
g = df.groupby('companyid')
df['Day'] = g.cumcount() + 1
newdf = df[['companyid','Day','AverageTemperature']]
return(newdf.to_sql("DistributorWiseParticularMonth", engine,
if_exists="replace"))
import sys
if __name__ == "__main__":
a = sys.argv[0]
b = sys.argv[1]
main(a,b)
python distributor.py 1, 2
它拿走了我的文件名分配器.py作为第一个参数。 以及我正在传递的实际参数,即1,2作为第二个参数。你知道吗
这是我得到的东西。你知道吗
sqlalchemy.exc.ProgrammingError: (pyodbc.ProgrammingError) ('42000', "
[42000] [Microsoft][ODBC SQL Server Driver][SQL Server]Incorrect syntax
near ','. (102) (SQLExecDirectW)")
[SQL: select a.companyid, CAST(c.gpsdatetime AS DATE) AS GPSDate,
AVG(c.tempanalog1) AS AverageTemperature from Vehicle_Master
a,GPSEventsData c with(nolock) where a.companyid = c.customerid and
datepart(month,gpsdatetime) = distributor.py AND a.active = 1 and
c.gpsdatetime >= DATEADD(MONTH, DATEDIFF(MONTH, 0, GETDATE()) - 12, 0)
AND c.gpsdatetime < DATEADD(MONTH, DATEDIFF(MONTH, 0, GETDATE()), 0) AND
DATEPART(hh,c.gpsdatetime) >= 9 AND DATEPART(hh,c.gpsdatetime) <= 19 AND
DATEPART(dw,c.gpsdatetime) != 1 AND a.VehicleID = 1,2 GROUP BY
a.companyid, CAST(c.gpsdatetime AS DATE) ORDER BY GPSDate]
(Background on this error at: http://sqlalche.me/e/f405)
你做错了什么。
sys.argv[0]
是脚本的名称。所以当你给它的时候,它会被脚本的名字覆盖。你知道吗简单修复
读取索引号0后的参数。比如
sys.argv[1]
,sys.argv[2]
等等。。你知道吗另外,Python允许您为变量名分配一系列项(包括列表)。因此,如果希望用户始终提供两个参数,可以将这些参数(作为字符串)赋给两个变量:
相关问题 更多 >
编程相关推荐