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

王林
Libérer: 2024-02-09 22:24:04
avant
612 Les gens l'ont consulté

不知道为什么在尝试使用 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())

Copier après la connexion

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())
Copier après la connexion

Sortie :

>>> enter your firstname: ollie
>>> enter your lastname: burgess
>>> enter your new school number: 20000
>>> [(1, 20000, 'ollie', 'burgess')]
Copier après la connexion

ou une autre option :

c.execute("select schoolnum, lastname from bartonhill where firstname = ?;", (firstname,))
print(c.fetchone())
Copier après la connexion

Ne vous donne que des valeurs spécifiques :

(20000, 'Burgess')
Copier après la connexion

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!

source:stackoverflow.com
Déclaration de ce site Web
Le contenu de cet article est volontairement contribué par les internautes et les droits d'auteur appartiennent à l'auteur original. Ce site n'assume aucune responsabilité légale correspondante. Si vous trouvez un contenu suspecté de plagiat ou de contrefaçon, veuillez contacter admin@php.cn
Tutoriels populaires
Plus>
Derniers téléchargements
Plus>
effets Web
Code source du site Web
Matériel du site Web
Modèle frontal
À propos de nous Clause de non-responsabilité Sitemap
Site Web PHP chinois:Formation PHP en ligne sur le bien-être public,Aidez les apprenants PHP à grandir rapidement!