2016-03-29 35 views
-1

我试图从数据库中的同一行读取2个值,但我只能够一次读取整行。我添加了所有我认为将是相关的代码:如何用sqlite从数据库的同一行读取单个值?

def find(search, term): 
     # Helper function for the find function. 
     with connect("GTINb.db") as db: 
      cursor = db.cursor() 
      sql = "select * from GTINb where {} = ?".format(search) 
      cursor.execute(sql,(term,)) 
      db.commit() 
      results = cursor.fetchall() 
      new = str(term) 
      if results: 
       results = str(results) 
       temp = open('temp.txt', 'a') 
       temp.write(results) 
       temp.write('\n') 
       temp.close() 
       with connect("GTINb.db") as db: 
        cursor.execute("UPDATE GTINb SET stockcur=stockcur-1 WHERE GTIN8=(?)",(new,)) 
        cur = cursor.execute("SELECT stockcur from GTINb by (?)",(new,)) 
        re = cursor.execute("SELECT restock from GTINb by (?)",(new,)) 
        if cur < re: 
         cursor.execute("UPDATE GTINb SET stockcur=stockcur+10 WHERE GTIN8=(?)",(new,)) 
         return print('More stock has been ordered in as stocks were low') 
        else: 
         return 
      else: 
       temp = open('temp.txt', 'a') 
       temp.write('Product not found') 
       temp.write('\n') 
       temp.close() 
       return 

我目前得到的错误sqlite3.OperationalError: near "(": syntax error,并试图取代“(?)”与%s,(%S)和?没有成功,提出以下错误消息:

sqlite3.OperationalError: near "12345670": syntax error // where 12345670 was the input represented by new 
sqlite3.OperationalError: near "(": syntax error 
sqlite3.OperationalError: near "?": syntax error 

是否有另一种方式做到这一点,或者我犯了一个简单的错误?

+0

'(?)'应该是什么意思? “by”只能用作“GROUP BY”或“ORDER BY”的一部分。 – Barmar

+0

所以它将''作为'GRINb'表的别名,它希望在SQL中的那个点处有一个'WHERE'子句(或其他子句),但它会找到'(?)',它不会'没有意义。 – Barmar

+0

@Barmar,by(?)被用来指已经存在于用户输入行中的已知值,以及错误可能在 – Beginner

回答

1

你写的SQL语句都不是有效的SQL。有关语法的信息,请参阅SQLite documentation

简述:

UPDATE GTINb SET stockcur=stockcur-1 WHERE GTIN8=(?) 
SELECT stockcur from GTINb by (?) 
SELECT restock from GTINb by (?) 

应该

UPDATE GTINb SET stockcur=stockcur-1 WHERE GTIN8 = ? 
SELECT stockcur FROM GTINb WHERE GTIN8 = ? 
SELECT restock FROM GTINb WHERE GTIN8 = ? 

虽然第一个将可能与不需要的括号执行。

一旦你有你的SQL的工作,你会发现,第二两个语句可以组合成

SELECT stockcur, restock FROM GTINb WHERE GTIN8 = ? 

我相信这是你在问什么。

+0

他似乎也不知道如何读取正确返回的值,您应该将其添加到答案中。 – Barmar

相关问题