Quantcast
Channel: Active questions tagged python - Stack Overflow
Viewing all articles
Browse latest Browse all 16921

Tuple problem with parameterized SQLite query

$
0
0

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')

Viewing all articles
Browse latest Browse all 16921

Latest Images

Trending Articles



Latest Images

<script src="https://jsc.adskeeper.com/r/s/rssing.com.1596347.js" async> </script>