I'm working on a telethon-based telegram chatbot that can query a customer db given a last name in the following format: /search thompson
, but am having some trouble using the fill function to keep the queries safe.
I'm getting one of two errors - one is tuple index out of range
when accessing query
directly, and Incorrect number of bindings supplied. The current statement uses 1, and there are 8 supplied.
when I use join (method 2 above). What am I doing incorrectly here?
UPDATE - this is the full error traceback followed by the code:
Traceback (most recent call last): File "/Users/.../.../.../.../script.py", line 155, in select test_message = create_message_select_query(res) ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ File "/Users/.../.../.../.../script.py", line 115, in create_message_select_query lname = i[1] ~^^^IndexError: tuple index out of range
And associated code:
# create message listing matchesdef create_message_select_query(ans): text = "" for i in ans: id = i[0] lname = i[1] fname = i[2] creation_date = i[3] text += "<b>"+ str(id) +"</b> | " +"<b>"+ str(lname) +"</b> | " +"<b>"+ str(fname)+"</b> | " +"<b>"+ str(creation_date)+"</b>\n" message = "Information about customers:\n\n"+text return message@client.on(events.NewMessage(pattern="(?i)/search"))async def select(event): try: # Get the sender of the message sender = await event.get_sender() SENDER = sender.id # Get the text of the user AFTER the /search command list_of_words = event.message.text.split(" ") # accessing first item query = list_of_words[1] sql = "select (SELECT * from customers where lname = ?)" #args = ''.join((query)) args = query cursor = conn.execute(sql, (args,)) res = cursor.fetchall() # fetch all the results # If there is at least 1 row selected, print a message with matches # The message is created using the function defined above if(res): test_message = create_message_select_query(res) await client.send_message(SENDER, test_message, parse_mode='html') # Otherwhise, print a default text else: text = "No matching customers found" await client.send_message(SENDER, text, parse_mode='html')