我可以逃避此错误回溯吗(最近一次通话最近):<模块>中第1行的文件“ <stdin>”,data_entry中第2行的文件“ <stdin>”

时间:2019-01-09 11:48:36

标签: python sqlite

我正在尝试将一些信息放入数据库

import sqlite3
conn = sqlite3.connect("tutorial.db")
c=conn.cursor()
def create_table():
    c.execute("CREATE TABLE IF NOT EXISTS stuffPlot(unix REAL,datestamp Text,keyword TEXT,value REAL)")
def data_entry(x,y,z,w):
    c.execute("INSERT INTO stuffPlot VALUES({},{},{},{})".format(x,y,z,w))
    conn.commit()
    c.close()
    conn.close()
x=int(input("enter a number"))
y=str(input("enter a str"))
z=int(input("enter a number"))
w=str(input("enter a str"))
create_table()
data_entry(x,y,w,z)

我想写数据库,但是它创建了以下数据库 错误:

  
    
      

data_entry(x,y,w,z)           追溯(最近一次通话):             文件“”,第1行,位于             文件“”,第2行,位于data_entry中           sqlite3.OperationalError:没有这样的列:name

    
  

2 个答案:

答案 0 :(得分:2)

您的字符串缺少引号,因此它们被视为列名,请尝试以下操作:

for i in range(len(dgu):
    for j in range(len(solu)):
        if solu[j] in dgu[i]:
            print(dgu[i])
        # don't need elsepass here, as it serves no purpose
    # don't need to increment i/j in a for loop manually as it iterates through the range created from the length of dgu/solu

修改

您应该这样做,而不是上面的行(它容易受到SQL注入的攻击):

c.execute("INSERT INTO stuffPlot VALUES({},'{}','{}',{})".format(x,y,z,w))

答案 1 :(得分:0)

嘿,你的最后一行叫这个:

data_entry(x,y,w,z)

它的x,y,w,z,但是在您的函数定义中,您会收到以下消息:

def data_entry(x,y,z,w): #sequence is x,y,z,w

因此,对于什么是什么变量造成了一些困惑。 而且您的字符串也需要用@scope括在单引号内。

这是一个工作代码

import sqlite3
conn = sqlite3.connect("tutorial.db")
c=conn.cursor()
def create_table():
    c.execute("CREATE TABLE IF NOT EXISTS stuffPlot(unix REAL,datestamp Text,keyword TEXT,value REAL)")
def data_entry(x,y,z,w):
    c.execute("INSERT INTO stuffPlot VALUES({},'{}',{},'{}');".format(x,y,z,w)) 
    #fixed the quotes above
    conn.commit()
    c.close()
    conn.close()
x=int(input("enter a number"))
y=str(input("enter a str"))
z=int(input("enter a number"))
w=str(input("enter a str"))
create_table()
data_entry(x,y,z,w) #fixed x,y,w,z to x,y,z,w

如有疑问,请发表评论。