【问题标题】:sqlite3.OperationalError: no such column: Nonesqlite3.OperationalError:没有这样的列:无
【发布时间】:2020-03-27 20:55:19
【问题描述】:

谁能帮我解决这个问题这是我的代码为什么它不能检测到列? 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)

【问题讨论】:

  • 您确定npm, nama, jurusan 列存在于表usernama 中的表presensi 中吗?这些外观是值,而不是列名。
  • 是的,存在

标签: python-3.x sqlite


【解决方案1】:

检查表中实际存在的以下列user:npm, nama, jurusan;并在表中presensinama

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 注入攻击的可能性。最好使用parameterised queries,使用占位符:

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

【讨论】:

  • 这是修复,但为什么 npm = npm1 nama = nama1 jurusan = jurusan1 没有输出
  • @marvinarieljohannes 我不确定npm1nama1jurusan1 是否是全局变量?如果它们只存在于函数Daftar() 中,那么它们将是None。我认为您应该将它们传递给这样的函数:def Clicked(npm, nama, jurusan):
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2020-12-01
  • 2021-01-12
  • 2021-01-27
  • 2016-06-29
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多