【问题标题】:how can I fix the error [closed]我该如何解决错误[关闭]
【发布时间】:2014-09-05 10:50:09
【问题描述】:

我是新手,我有我的代码,在我创建我的 SQL 查询之前运行良好。 我使用 sqlite3 作为数据库。

这是我的代码:

code.py

print """<INPUT  Value="Valider" Type="SUBMIT" >

<head>
   <script type="text/javascript">

   {

   alert('thank you.');

   }

   </script>
   </head>"""

print "</body>"
print "</html>"

conn = sqlite3.connect('database.sqlite')
conn.row_factory = sqlite3.Row 
c = conn.cursor()

sql = "INSERT INTO info_calc (my_argv[2], my_argv[3], my_argv[4], sys.platform, getpass.getuser(), machine ) VALUES (%s, %s, %s, %s, %s, %s)

try:
    c.execute(sql)
    conn.commit()
except:
     conn.rollback()

cursor.close()

当我执行我的代码时,我有这个错误:

sql = "INSERT INTO info_calc (my_argv[2], my_argv[3], my_argv[4], sys.platform, getpass.getuser(), machine ) VALUES (%s, %s, %s, %s, %s, %s)
                                                                                                                                               ^
SyntaxError: EOL while scanning string literal

【问题讨论】:

  • 您在sql 定义的末尾缺少"
  • 我更正了,但这不是问题。
  • 不要编辑您的问题以删除您询问的错误;这将使任何先前的答案无效。
  • @CL。 : 我刚刚更正了语法和错误,因为我现在没有同样的错误。
  • @Glacius,StackOverflow 是一个针对重点突出、可重用的技术问题的论坛——以便其他人可以从问题及其答案中学习。这部分意味着问题应该被预先消化到他们只询问一件事的程度,被删除重复(每个“事情”只有一个问题),简洁地做到这一点,并且可以在没有回溯的情况下回答 -向前;有关更多信息,请参阅sscce.org 的“正确”部分。

标签: python linux database sqlite


【解决方案1】:

您忘记了字符串末尾的引号。

另外,INSERT 语句需要一个列名列表; my_argv[2] 不是列名。

此外,%s 不是数据库参数标记;请改用?

另外,getpass 是一个模块;你不能调用它。

sql = "INSERT INTO info_calc (application,version,path,os,user,ip) "+
      "VALUES (?,?,?,?,?,?)"
args = my_argv[2], my_argv[3], my_argv[4], sys.platform, getpass.getuser(), machine
c.execute(sql, args)

【讨论】:

  • 它不起作用:args = my_argv[2], my_argv[3], my_argv[4], sys.platform, getpass().getuser(), machine TypeError: 'module' object不可调用 localhost.localdomain - - [15/Jul/2014 13:09:33] CGI 脚本退出状态 0x100
【解决方案2】:

你忘记保留" 应该是这样的

sql = "INSERT INTO info_calc (application,version,path,os,user,ip) VALUES (%s, %s, %s, %s, %s, %s)"

还有一件事,在执行查询插入时,您需要给出值

应该是

c.execute(sql,(my_argv[2], my_argv[3], my_argv[4], sys.platform, getpass.getuser(), machine ))

【讨论】:

  • 是的,我已经尝试过了:sql = "INSERT INTO info_calc (my_argv[2], my_argv[3], my_argv[4], sys.platform, getpass.getuser(), machine) VALUES ( %s, %s, %s, %s, %s, %s)" args = my_argv[2], my_argv[3], my_argv[4], sys.platform, getpass().getuser(), 机器 c .execute(sql, args)
  • 我有这个错误:args = my_argv[2], my_argv[3], my_argv[4], sys.platform, getpass().getuser(), machine TypeError: 'module' object不可调用
  • @Glacius 你的 info_calc 表中列的名称是什么
  • 这是我在我的数据库脚本中创建的表:c.execute('create table info_calc(id integer primary key autoincrement, version text, path text, os text, user text)') c.执行('创建表info_recup(id整数主键,名称文本,地址文本,部门文本,项目文本)')
  • @Glacius:您没有说明如何它不起作用;至少没有异常消息,您在此处将getpass.getuser() 更改为getpass().getuser() 并不是很明显。
猜你喜欢
  • 2015-03-23
  • 1970-01-01
  • 2022-11-16
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2017-10-28
  • 2021-03-12
  • 2019-09-16
相关资源
最近更新 更多