Je développe ce programme et pour une raison quelconque, je continue à recevoir cette erreur. Est-ce une erreur causée par Ubuntu ou quelque chose dans mon code qui bloque mon programme?
J'accède à une base de données et j'essaie de supprimer les caractères suivants de la sortie: et, via value.translate(dictionary_of_bad_characters)
. C'est là que j'obtiens mon erreur.
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
Cette erreur indique que value
est un tuple et non une chaîne comme prévu. Cela indique un problème avec votre application.
Ici le problème est que fetchone()
renvoie un one -uple. Vous devriez changer de cette ligne:
value = results.fetchone()
à ceci (notez la virgule après value
name__):
value, = results.fetchone()
ou ceci (non recommandé):
value = results.fetchone()[0]
Mais pourquoi fetchone()
renvoie-t-il un tuple à la place d'une chaîne? Parce que vous pouvez SELECT
plusieurs colonnes. Considérons par exemple l'instruction SQL suivante:
SELECT a, b, c FROM my_table;
Dans ce cas, fetchone()
renverra un trois -uple.
En écrivant value, = fetchone()
, vous dites à Python que vous attendez un one-Tuple et que vous voulez que cet élément unique soit placé dans value
name__. Si vous attendiez le triple-tuplet, vous auriez utilisé column_a, column_b, column_c = resulsts.fetchone()
.
C’est la raison pour laquelle vous devriez préférer value,
à fetchone()[0]
.
Bonus tip: J'ai remarqué que vous utilisiez Python 3. Dans ce cas, vous pouvez écrire:
translation_table = dict.fromkeys(b'+-(),', None)
Accélérer votre code et le rendre plus propre.