cur.execute("delete from book where price=?",(18,)) 下一步提交事务代码
时间: 2024-03-17 22:43:01 浏览: 14
这段代码将删除 book 表中价格为 18 的书籍记录。下一步提交事务的代码应该是:
```
conn.commit()
```
该代码将提交当前事务,使之生效。在执行 DML 语句后,如果没有手动提交事务,那么修改将不会立即写入数据库,而是会被缓存到事务之中。只有在手动提交事务之后,修改才会真正写入数据库。如果不提交事务,修改将会被回滚,即还原到执行 DML 语句之前的状态。
相关问题
cur.execute("SELECT * FROM users WHERE id = ?", (id,1))
这段代码使用了 `execute()` 方法执行了一个 SQL 查询语句,查询的是 `users` 表中 ID 为 1 的记录。其中,查询语句使用了参数化查询,将要查询的 ID 绑定到了查询语句中。
具体来说,这段代码中的 `?` 是一个占位符,表示需要绑定一个值。而 `(id,1)` 是一个元组,包含了要绑定的两个值,第一个是 `id` 变量的值,第二个是数字 1。在执行查询语句时,SQLite 会将这两个值分别绑定到查询语句中的两个问号处,从而实现了查询 ID 为 1 的用户信息的功能。
需要注意的是,这段代码中的 `cur` 变量应该是一个 `cursor` 对象,用于执行 SQL 查询语句。在执行查询语句之前,需要先使用 `connect()` 方法连接到 SQLite 数据库,并获取一个 `cursor` 对象。例如:
```python
import sqlite3
conn = sqlite3.connect('example.db')
cur = conn.cursor()
# 执行查询语句
cur.execute("SELECT * FROM users WHERE id = ?", (id,1))
# 处理查询结果
result = cur.fetchone()
print(result)
# 关闭数据库连接
cur.close()
conn.close()
```
这里的 `conn` 对象是一个 SQLite 数据库连接对象,用于连接到数据库。使用 `conn.cursor()` 方法获取一个 `cursor` 对象,用于执行 SQL 查询语句。在执行完查询之后,需要调用 `cur.close()` 方法关闭 `cursor` 对象,再调用 `conn.close()` 方法关闭数据库连接。
import tkinter as tk import sqlite3 import random from tkinter import messagebox root = tk.Tk() app = EnglishLearningApp(root) root.mainloop() class EnglishLearningApp: def __init__(self, master): self.master = master master.title("英语学习软件") self.database_button = tk.Button(master, text="单词库", command=self.word_consult) self.database_button.pack(pady=10) self.quiz_button = tk.Button(master, text="英语默写", command=self.quiz_page) self.quiz_button.pack(pady=10) self.conn = sqlite3.connect('words.db') self.cursor = self.conn.cursor() self.cursor.execute('''CREATE TABLE IF NOT EXISTS words (word text PRIMARY KEY)''') self.conn.commit() def word_consult(self): self.word_entry = tk.Entry(self.word_consult) self.word_entry.pack(padx=10, pady=10) self.add_button = tk.Button(self.word_consult, text="添加/删除单词", command=self.add_word) self.add_button.pack(pady=5) name = search_entry.get() cur.execute("SELECT * FROM data WHERE name=?", (name,)) word = cur.fetchone() if word: self.cursor.execute("INSERT INTO words VALUES (?)", (word,)) self.conn.commit() else: self.cursor.execute("DELETE FROM words WHERE word=?", (word,)) self.conn.commit()
这段代码存在一些问题:
1. EnglishLearningApp 类没有定义完整,缺少 quiz_page 函数实现。
2. 在 word_consult 函数中,创建了一个名为 word_entry 的 Entry 对象,但是它没有被放置到任何容器中,应该使用 self.word_entry。
3. 在 add_word 函数中,使用了 search_entry.get(),但是没有定义 search_entry 对象,应该使用 self.word_entry.get()。
4. 在 add_word 函数中,使用了 cur.execute(),但是应该使用 self.cursor.execute()。
5. 在 add_word 函数中,应该把获取的 word 对象转换为字符串,即使用 word[0]。
6. 在 add_word 函数中,应该加入 try-except 结构,以处理插入或删除单词时可能发生的异常情况。
下面是修改后的代码:
```
import tkinter as tk
import sqlite3
import random
from tkinter import messagebox
class EnglishLearningApp:
def __init__(self, master):
self.master = master
master.title("英语学习软件")
self.database_button = tk.Button(master, text="单词库", command=self.word_consult)
self.database_button.pack(pady=10)
self.quiz_button = tk.Button(master, text="英语默写", command=self.quiz_page)
self.quiz_button.pack(pady=10)
self.conn = sqlite3.connect('words.db')
self.cursor = self.conn.cursor()
self.cursor.execute('''CREATE TABLE IF NOT EXISTS words
(word text PRIMARY KEY)''')
self.conn.commit()
def word_consult(self):
self.word_entry = tk.Entry(self.master)
self.word_entry.pack(padx=10, pady=10)
self.add_button = tk.Button(self.master, text="添加/删除单词", command=self.add_word)
self.add_button.pack(pady=5)
def add_word(self):
word = self.word_entry.get()
if not word:
return
try:
self.cursor.execute("SELECT * FROM data WHERE name=?", (word,))
word = self.cursor.fetchone()
if word:
self.cursor.execute("INSERT INTO words VALUES (?)", (str(word[0]),))
self.conn.commit()
messagebox.showinfo("提示", "添加成功")
else:
self.cursor.execute("DELETE FROM words WHERE word=?", (word[0],))
self.conn.commit()
messagebox.showinfo("提示", "删除成功")
except Exception as e:
messagebox.showerror("错误", str(e))
def quiz_page(self):
pass
if __name__ == '__main__':
root = tk.Tk()
app = EnglishLearningApp(root)
root.mainloop()
```