After executing a query you need to fetch the results:
records = cursor.fetchall()
It is very important that you don't use format for SQL queries as it's susceptible to SQL injection attacks; instead use:
query = "select bill_number from table where created_at between %s and %s"
cursor.execute(query, (start_date, end_date))
records = cursor.fetchall()
If you want to add filters you just need to adjust the query and add the parameter:
query = "select bill_number from table where created_at between %s and %s and product=%s"
cursor.execute(query, (start_date, end_date, product))
In order to use a list as parameter you can use IN and a tuple:
>>> query = "select * from clients where added between %s and %s and score in %s"
>>> data = ('2019-01-01', '2020-03-01', tuple([1,2,3]))
>>> cursor.execute(query, data)
>>> rows = cursor.fetchall()
>>> len(rows)
32
>>>
Make sure you read the docs as they contain a lot of valuable information.