Rumah  >  Artikel  >  pembangunan bahagian belakang  >  Tidak pasti mengapa saya mendapat ralat sintaks apabila cuba menjalankan pertanyaan SQL UPDATE menggunakan rentetan f

Tidak pasti mengapa saya mendapat ralat sintaks apabila cuba menjalankan pertanyaan SQL UPDATE menggunakan rentetan f

王林
王林ke hadapan
2024-02-09 22:24:04616semak imbas

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

Kandungan soalan

Saya cuba menjalankan pertanyaan sql asas untuk mengemas kini nilai schoolnum dalam pangkalan data yang dipanggil bartonhill, menggunakan rentetan f untuk meletakkan nilai dalam

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())

Walau bagaimanapun, jika saya memasukkan nama saya ollie (yang wujud dalam pangkalan data sebagai nama pertama), menjalankan kod ini memberikan ralat "sqlite3.operationalerror: near "ollie": syntax error"

Saya cuba menukar jenis data nama dan nombor_baru tetapi itu hanya mengubah ralat


Jawapan Betul


Masih banyak yang perlu diperbaiki. Saya hanya membuat beberapa perubahan kecil, anda boleh memperbaikinya lagi. Tuple sentiasa dimasukkan. Menukar kunci utama boleh dilakukan tetapi tidak semudah itu, google sahaja. Meminta nilai baharu selepas memulakan nilai buat kali pertama. Sila baca juga komen di atas dengan teliti!

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())

Keluaran:

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

atau pilihan lain:

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

Hanya memberi anda nilai khusus:

(20000, 'Burgess')

Atas ialah kandungan terperinci Tidak pasti mengapa saya mendapat ralat sintaks apabila cuba menjalankan pertanyaan SQL UPDATE menggunakan rentetan f. Untuk maklumat lanjut, sila ikut artikel berkaitan lain di laman web China PHP!

Kenyataan:
Artikel ini dikembalikan pada:stackoverflow.com. Jika ada pelanggaran, sila hubungi admin@php.cn Padam