Rumah > pembangunan bahagian belakang > Tutorial Python > 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

王林
Lepaskan: 2024-02-09 22:24:04
ke hadapan
641 orang telah melayarinya

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

Salin selepas log masuk

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())
Salin selepas log masuk

Keluaran:

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

atau pilihan lain:

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

Hanya memberi anda nilai khusus:

(20000, 'Burgess')
Salin selepas log masuk

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!

sumber:stackoverflow.com
Kenyataan Laman Web ini
Kandungan artikel ini disumbangkan secara sukarela oleh netizen, dan hak cipta adalah milik pengarang asal. Laman web ini tidak memikul tanggungjawab undang-undang yang sepadan. Jika anda menemui sebarang kandungan yang disyaki plagiarisme atau pelanggaran, sila hubungi admin@php.cn
Tutorial Popular
Lagi>
Muat turun terkini
Lagi>
kesan web
Kod sumber laman web
Bahan laman web
Templat hujung hadapan