sqlite3.OperationalError: нет такого столбца: нет - PullRequest
0 голосов
/ 27 марта 2020

Может ли кто-нибудь помочь мне решить эту проблему? Это мой код, почему он не может обнаружить столбец? sqlite3.OperationalError: нет такого столбца: нет

import sqlite3
import tkinter
from tkinter import *
from tkinter import ttk


    def Daftar():
    window = Tk()
    window.title("Welcome to TutorialsPoint")
    window.geometry('400x400')
    window.configure(background = "grey");

    Lnpm = Label(window, text="Please Input Your npm: ").grid(row=0, column=0)
    Lnama = Label(window,text="Please Input Your nama: ").grid(row=1, column=0)
    Ljurusan = Label(window,text="Please Input Your jurusan: ").grid(row=2, column=0)

    npm1 = Entry(window).grid(row = 0,column = 1)
    nama1 = Entry(window).grid(row = 1,column = 1)
    jurusan1 = Entry(window).grid(row = 2,column = 1)

    def Clicked():
     npm = npm1
     nama = nama1
     jurusan = jurusan1

     connect = sqlite3.connect('C:///Users///Marvin///Desktop///FaceRecognition-Presernsi-sql///SQL///Presensi.db')
     cur = connect.cursor()
     connect.execute("INSERT OR IGNORE INTO user(npm,nama,jurusan) Values("+str(npm)+",' "+str(nama)+" ',' "+str(jurusan)+" ' )")
     connect.execute("INSERT OR IGNORE INTO presensi(nama) Values(' "+str(nama)+" ')")
     connect.commit()
     cur.close()
    tn = ttk.Button(window ,text="Register",command=Clicked).grid(row=3,column=0)

1 Ответ

1 голос
/ 27 марта 2020

Проверьте, действительно ли в таблице есть следующие столбцы user: npm, nama, jurusan; и в таблице presensi: nama.

connect.execute("INSERT OR IGNORE INTO user(npm,nama,jurusan) Values("+str(npm)+",' "+str(nama)+" ',' "+str(jurusan)+" ' )")
connect.execute("INSERT OR IGNORE INTO presensi(nama) Values(' "+str(nama)+" ')")

Если вы пытаетесь обновить текстовые столбцы, как это, вы должны окружить значения кавычки т.е. это должно быть ...values('" + str(npm) + "'"...

Однако построение запроса sql, как этот, приводит к возможности атак sql инъекций. Вместо этого лучше использовать параметризованные запросы , используя заполнители:

cur.execute("INSERT OR IGNORE INTO user(npm,nama,jurusan) values(?,?,?)", (str(npm),str(nama),str(jurusan))
cur.execute("INSERT OR IGNORE INTO presensi(nama) values(?)", (str(nama),))
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...