如何在 Python 中将"start date"和"end date"作为命令行参数传递



我正试图使用基于日期范围的Python将数据从一个表传输到另一个表。

import anprint
import os
import sys
import re
import datetime
from mydb import cursor
try:
    cam_name = sys.argv[1]
    rec_date = sys.argv[2]
except:
    print "Usage: %s cam_name date " % sys.argv[0]
    sys.exit(1)
dbObj = anprint.ExcelDb()
# Get a list of the plates...
tablename = "customer_1.%s_anpr_vega" % cam_name
sql = """SELECT plate, datetime, id FROM %s WHERE DATE(datetime)="%s" """ % (tablename, rec_date)
cursor.execute(sql)
retval = cursor.fetchall()
for values in retval:
    print values
    (vrm, vrm_datetime, record_id) = values
    dbObj.reconcile_plate(cam_name, vrm, vrm_datetime, record_id)

1)这是一个糟糕的例子:

sql = """SELECT plate, datetime, id FROM %s WHERE DATE(datetime)="%s" """ % (tablename, rec_date)
cursor.execute(sql)

执行以下操作:

sql = """SELECT plate, datetime, id FROM %s WHERE DATE(datetime)=?""" % tablename
cursor.execute(sql, [rec_date])

2) 使用sys.argv[n]来获取像cam_name = sys.argv[1]这样的命令行参数是一个简单而不好的解决方案。好的方法是使用argparse为脚本分配命令行参数。

3) 在sql中使用between运算符是一种很好的做法,如下所示:

sql = "SELECT plate, datetime, id FROM " +tablename+ " WHERE datetime between ? and ?"
    cursor.execute(sql, [start_date, end_date])

进一步阅读它以了解参数样式的SQL查询。

相关内容

  • 没有找到相关文章

最新更新