我正在开发这个程序,但不知为何,我不断收到此错误。这是 Ubuntu 导致的错误,还是我的代码中存在导致程序崩溃的问题?
我正在访问数据库并尝试从输出中删除以下字符:and, via value.translate(dictionary_of_bad_characters)
。这就是我收到错误的地方。
def get_data(plu): # Get the data needed
global value # Set the variable value to global
conn = sqlite3.connect('plus.sqlite') # Connect to the sqlite3 database
cursor = conn.cursor() # Set cursor as the cursor for plus.sqlite
results = cursor.execute('SELECT value FROM plus WHERE plu=?', [plu])
# Above code gets the data value for value with the PLU of plu
value = results.fetchone() # Get the results of value
data = [row[0] for row in results.fetchall()]
translation_table = dict.fromkeys(map(ord, '+-(),'), None)
# Above code creates a table with the mapped characters
value = value.translate(translation_table)
# Above code removes any unnescessary characters from value
response = { 'PLU': plu,
'Value': value
} # Create the response variable
value = int(value) # Convert value to type integer
cursor.close() # Close the cursor
conn.close() # Close the connection
return(value) # Return to the program flow
答案1
此错误表明这value
是一个元组,而不是您预期的字符串。这表示您的应用程序存在问题。
这里的问题是fetchone()
返回一个一元组。你应该从这一行开始更改:
value = results.fetchone()
对此(注意后面的逗号value
):
value, = results.fetchone()
或者这个(不推荐):
value = results.fetchone()[0]
但是为什么fetchone()
返回的是元组而不是字符串呢?因为你可以返回SELECT
多个列。例如,考虑以下 SQL 语句:
SELECT a, b, c FROM my_table;
在这种情况下,fetchone()
将返回一个三元组。
写代码value, = fetchone()
就是告诉 Python 你期望一个单元组,并且希望将单个项放入value
。如果你期望三元组,那么你应该使用column_a, column_b, column_c = resulsts.fetchone()
。
value,
这就是您应该选择 的原因fetchone()[0]
。
额外提示:我注意到你正在使用 Python 3。在这种情况下,你可以写:
translation_table = dict.fromkeys(b'+-(),', None)
加快您的代码并使其更加简洁。