Tham số trong câu truy vấn Sqlite 3

Em có làm 1 hàm để chạy câu truy vấn, truyền tham số từ người dùng nhập vào. Nhưng nó báo dòng như này ạ. Em dùng câu lệnh Insert, update dùng ? vẫn dùng được nhưng câu select thì nó báo vậy :frowning:

import sqlite3

def Search():
    Search_words = str(input("Nhập từ khoá tìm kiếm: "))
    conn = sqlite3.connect("data/DBTimviec.db")
    query = """SELECT TITLE,LINK, OCCUPATIONS, COMPANY_NAME, LOCATION, CONTENT 
    from JOBS_DATA 
    WHERE DESCRIPTION like '%?%'
    """
    a = conn.execute(query,(Search_words,)).fetchall()
    conn.commit()
    for i in a:
        for item in i:
            print(item)
if __name__ == '__main__':
    Search()

Lỗi: a = conn.execute(query,(Search_words,)).fetchall()
sqlite3.ProgrammingError: Incorrect number of bindings supplied. The current statement uses 0, and there are 1 supplied.

Dấu ? nằm trong chuỗi nên nó thành 0 bindings luôn.
Giờ bạn sửa lại chỗ đó thành LIKE ? luôn.

5 Likes

dạ để em thử ạ cám ơn đại ca :heart_eyes:

Dạ nếu như thế thì được nhưng sẽ không content nào như vậy ạ.
Kiểu như contentBác sĩ thú y -> mà em nhập thú y thì nó không ra ạ. Nếu là like %?( trong câu query trên sqlite) thì nó sẽ ra tất cả các dòng có từ thú y còn đằng trước là gì cũng dc. Mỗi tội là ghi thế nó lại báo lỗi @@

Các a ơi. E biết là nó bị lỗi ở chỗ không có tham số truyền vào cho dòng a = conn.execute(query,(Search_words,)).fetchall() chỗ e truyền (Search_words,) vào thì ko có gì để truyền.
vậy chỗ like '%?% phải thay như nào ạ :frowning:

1 Like

ý ropg10 là bạn tự chèn cái % vô cái chuỗi của bạn trước khi cho nó vô câu sql để sql sanitize

query("... LIKE ?", "%{}%".format(your_input))
3 Likes

Dạ được rồi nè cám ơn 2 a nha :heart_eyes:

83% thành viên diễn đàn không hỏi bài tập, còn bạn thì sao?