嗨,我是一個初學者,剛剛創建了一個簡單的代碼(實際上只是為了測驗)將 python 檔案連接到 SQL 的 db 檔案。這是我的代碼:
import sqlite3
connection = sqlite3.connect('aquarium.db')
cursor = connection.cursor()
cursor.execute("""CREATE TABLE fish (
name TEXT,
species TEXT,
tank_number INTEGER)
""")
cursor.execute("INSERT INTO fish VALUES ('Wharton', 'shark', 1)")
cursor.execute("INSERT INTO fish VALUES ('Crimson', 'cuttlefish', 7)")
rows = cursor.execute("SELECT name, species, tank_number FROM fish").fetchall()
print(rows)
問題是,當我用資料庫瀏覽器打開 aquarium.db 時,只創建了表,但我的 INSERT INTO 中的值沒有被插入。有什么我做錯了嗎? 我的資料庫瀏覽器的圖片
順便說一句,我使用 VSCode 進行編碼。我還將 db 檔案放在與 py 檔案相同的位置。我正在使用 MAC
uj5u.com熱心網友回復:
插入行后,您應該使用connection.commit().
讓我們看看發生了什么。
首先,我們創建資料庫:
In [1]: import sqlite3
In [2]: connection = sqlite3.connect('aquarium.db')
...: cursor = connection.cursor()
Out[2]: <sqlite3.Cursor at 0x80424f1f0>
有一個aquarium.db長度為 0 的檔案:
ll aquarium.db
-rw------- 1 rsmith rsmith - 0 Oct 16 09:36 aquarium.db
接下來我們創建表:
In [3]: cursor.execute("""CREATE TABLE fish (
...: name TEXT,
...: species TEXT,
...: tank_number INTEGER)
...: """)
Out[3]: <sqlite3.Cursor at 0x80424f1f0>
檔案大小跳到 8 kB:
elysium:~> ll aquarium.*
-rw------- 1 rsmith rsmith - 8192 Oct 16 09:36 aquarium.db
如果此時您在sqlite3程式中打開資料庫,并輸入命令.dump fish,您將看到以下輸出:
PRAGMA foreign_keys=OFF;
BEGIN TRANSACTION;
CREATE TABLE fish (
name TEXT,
species TEXT,
tank_number INTEGER);
COMMIT;
如您所見,創建表會隱式提交它。現在退出該sqlite3工具。
當我們插入行時:
In [4]: cursor.execute("INSERT INTO fish VALUES ('Wharton', 'shark', 1)")
...: cursor.execute("INSERT INTO fish VALUES ('Crimson', 'cuttlefish', 7)")
Out[4]: <sqlite3.Cursor at 0x80424f1f0>
然后資料庫檔案沒有變化,但是出現了一個日志:
ll aquarium.*
-rw------- 1 rsmith rsmith - 4616 Oct 16 09:37 aquarium.db-journal
-rw------- 1 rsmith rsmith - 8192 Oct 16 09:36 aquarium.db
md5 aquarium.db
MD5 (aquarium.db) = 4014cf24418d18ae8c40ecd3f5c6ce2e
在我們提交交易之后,
In [5]: connection.commit()
日志檔案消失:
ll aquarium.*
-rw------- 1 rsmith rsmith - 8192 Oct 16 09:42 aquarium.db
md5 aquarium.*
MD5 (aquarium.db) = cdd59fe139828e023aa54d3233594067
盡管檔案大小保持不變,但資料庫檔案的校驗和會發生變化。這表明內容發生了變化。
uj5u.com熱心網友回復:
import sqlite3
connection = sqlite3.connect('aquarium.db')
cursor = connection.cursor()
cursor.execute("""CREATE TABLE fish (
name TEXT,
species TEXT,
tank_number INTEGER)
""")
cursor.execute("INSERT INTO fish (name, species, tank_number) VALUES ('Wharton', 'shark', 1)")
cursor.execute("INSERT INTO fish VALUES ('Crimson', 'cuttlefish', 7)")
rows = cursor.execute("SELECT name, species, tank_number FROM fish").fetchall()
connection.commit()
uj5u.com熱心網友回復:
您好,問題已解決!!!:)) 我只需要在該行的最后添加 connection.commit() ,資料就會出現在 DB Browser 的“Browse Data”部分。非常感謝@Captain Security、@Tim Roberts、@ali7575、@deceze 和 @PChemguy!
uj5u.com熱心網友回復:
您不必創建具有相同名稱的表。
import sqlite3
connection = sqlite3.connect('aquarium.db')
print(connection)
cursor = connection.cursor()
print(cursor)
cursor.execute("""CREATE TABLE fish (
name TEXT,
species TEXT,
tank_number INTEGER)
""")
cursor.execute("INSERT INTO fish VALUES ('Wharton', 'shark', 1)")
cursor.execute("INSERT INTO fish VALUES ('Crimson', 'cuttlefish', 7)")
rows = cursor.execute("SELECT name, species, tank_number FROM fish").fetchall()
print(rows)
你能評論那個塊的輸出嗎?
轉載請註明出處,本文鏈接:https://www.uj5u.com/qukuanlian/514713.html
標籤:Pythonsqlite
