Maison  >  Article  >  développement back-end  >  Je ne sais pas pourquoi j'obtiens une erreur de syntaxe lorsque j'essaie d'exécuter une requête SQL UPDATE à l'aide d'une chaîne f

Je ne sais pas pourquoi j'obtiens une erreur de syntaxe lorsque j'essaie d'exécuter une requête SQL UPDATE à l'aide d'une chaîne f

王林
王林avant
2024-02-09 22:24:04614parcourir

不知道为什么在尝试使用 f 字符串运行 SQL UPDATE 查询时出现语法错误

Contenu de la question

J'essaie d'exécuter une requête SQL de base pour mettre à jour la valeur de schoolnum dans une base de données appelée bartonhill, en utilisant une chaîne f pour mettre la valeur dans

import sqlite3
name = [input('enter your firstname: ')]


conn = sqlite3.connect('revision.db')
c = conn.cursor()

# create table
c.execute('''CREATE TABLE IF NOT EXISTS bartonHill (
    firstName TEXT NOT NULL,
    lastName TEXT NOT NULL,
    schoolNum INTEGER NOT NULL PRIMARY KEY
)''')

conn.commit()

c.execute("INSERT INTO bartonHill VALUES ('Ollie','Burgess','20314')")
conn.commit()

new_number = tuple[(int(input('enter your new school number')))]
c.execute(f"UPDATE bartonHill set schoolNum = '{new_number}' WHERE firstName = '{name}'")
conn.commit
c.execute('SELECT lastName, schoolNum FROM bartonHill WHERE firstName = (?)',name)
print(c.fetchall())

Cependant, si je saisis mon nom ollie (qui existe dans la base de données en tant que prénom), l'exécution de ce code donne l'erreur "sqlite3.opérationalerror : près de "ollie" : erreur de syntaxe"

J'ai essayé de changer le type de données nom et new_number mais cela n'a changé que l'erreur


Réponse correcte


Il y a encore beaucoup à améliorer. Je n'ai apporté que quelques petites modifications, vous pouvez l'améliorer davantage. Les tuples sont toujours insérés. Changer la clé primaire est possible mais pas si simple, il suffit de la rechercher sur Google. Demande une nouvelle valeur après avoir initialisé la valeur pour la première fois. Veuillez également lire attentivement les commentaires ci-dessus !

import sqlite3

conn = sqlite3.connect('revision.db')
c = conn.cursor()

# create table
c.execute('''create table if not exists bartonhill (
    id integer primary key autoincrement,
    schoolnum integer not null,
    firstname text not null,
    lastname text not null   
)''')
conn.commit()

c.execute("insert into bartonhill (schoolnum,firstname,lastname) values (?,?,?); ", (20314, 'ollie','burgess'))
conn.commit()

# ask for changes here
firstname = input('enter your firstname: ')
lastname = input('enter your lastname: ')
new_number = int(input('enter your new school number: '))

c.execute("update bartonhill set schoolnum = ? where firstname = ?;", (new_number, firstname))
conn.commit

c.execute("select * from bartonhill where firstname = ?;", (firstname,))
print(c.fetchall())

Sortie :

>>> enter your firstname: ollie
>>> enter your lastname: burgess
>>> enter your new school number: 20000
>>> [(1, 20000, 'ollie', 'burgess')]

ou une autre option :

c.execute("select schoolnum, lastname from bartonhill where firstname = ?;", (firstname,))
print(c.fetchone())

Ne vous donne que des valeurs spécifiques :

(20000, 'Burgess')

Ce qui précède est le contenu détaillé de. pour plus d'informations, suivez d'autres articles connexes sur le site Web de PHP en chinois!

Déclaration:
Cet article est reproduit dans:. en cas de violation, veuillez contacter admin@php.cn Supprimer