SQL Like оператор с переменной в python - PullRequest
0 голосов
/ 07 апреля 2020

Вот часть кода:

import sqlite3
from PIL import Image,ImageTk
import cv2
import numpy as np
from tkinter import Tk, Label,Button,Toplevel,Entry

def display():
    m,n=0,0
    c=str(en.get())
    print(c)
    t=Toplevel()
    d="%"+c+"%"
    cursor = conn.execute("""SELECT * from (select * from
        user_1 union all SELECT *
        from user_3 union all SELECT *
        from user_4 union all SELECT *
        from user_5 union all SELECT *
        from user_2 ) where id like %s""",(d,))
    for row in cursor: 
        print("ID = ", row[0])
        print("IMG = ",row[1])

    t.mainloop()
    print("Operation done successfully");
    conn.close()

w=Tk()
w.title("gui")
en=Entry(w)
en.grid(row=0)
conn = sqlite3.connect('datastorage.db')
print("Opened database successfully");
a=Button(w,text="display",command=display).grid()

Оператор sql LIKE генерирует синтаксическую ошибку следующим образом:

Exception in Tkinter callback
Traceback (most recent call last):
  File "C:\Users\ABC\AppData\Local\Programs\Python\Python37\lib\tkinter\__init__.py", line 1705, in __call__
    return self.func(*args)
  File "C:\Users\ABC\Desktop\Python tut\trial.py", line 18, in display
    from user_2 ) where id like %s""",(d,))
sqlite3.OperationalError: near "%": syntax error

c - строка, введенная пользователь, его значение хранится в d, как я хочу, чтобы все строки, содержащие строку c. Я знаю, что есть много похожих вопросов, но ни один из них не решает мою проблему. Может кто-нибудь помочь мне?

1 Ответ

1 голос
/ 07 апреля 2020

попробуйте следующее:

c = str(en.get())
sql = f"""SELECT * from (select * from
        user_1 union all SELECT *
        from user_3 union all SELECT *
        from user_4 union all SELECT *
        from user_5 union all SELECT *
        from user_2 ) where id like '%{c}%'"""
cursor = conn.execute(sql)
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...