簡體   English   中英

使用檢查點時 sqlite3 未知數據庫模式?

[英]sqlite3 unknown database schema when using a checkpoint?

我正進入(狀態:

sqlite3.OperationalError:未知的數據庫架構

conn = sqlite3.connect('tick.db', detect_types=sqlite3.PARSE_DECLTYPES, timeout=20,isolation_level=None)
# conn1 = sqlite3.connect('nifty_tick.db', detect_types=sqlite3.PARSE_DECLTYPES, timeout=20,isolation_level=None)

c = conn.cursor()
# c1 = conn1.cursor()

c.execute('PRAGMA journal_mode=wal')

def tick_entry1(inst,timestamp,ltp, bid, ask):
    if inst == 12335874:
        c.execute('INSERT INTO niftyfut (timestamp, close, bid, ask) VALUES (?,?,?,?)',
                  (timestamp, ltp, bid, ask))

def on_ticks(ws, ticks):
    global c, conn
    for t in ticks:
        if t['instrument_token'] == 12335874:
            timestamp = t['timestamp']
            ltp = t['last_price']
            inst = t['instrument_token']

            try:
                tick_entry1(inst,timestamp,ltp)
            except:
                # print('problem with db')
                pass
    c.execute('PRAGMA schema.wal_checkpoint(FULL);')

我努力了:

c.execute('PRAGMA schema.wal_checkpoint(FULL);')

c.execute('PRAGMA schema.wal_checkpoint(FULL)')

編輯

我剛試過:

c.execute('PRAGMA wal_checkpoint(FULL)')

它似乎工作。 現在想知道是否應該在開始時執行以下操作:

c.execute("PRAGMA wal_autocheckpoint = 0")

該消息是說沒有數據庫具有名為 schema 的模式。

在文檔中,模式是斜體的,表示它是符號而不是實際值,並且將被替換為適當的值,該值用於區分附加的數據庫。

例如,如果您使用

ATTACH DATABASE the_database_path AS database2 /*<<<<<<<<<< THE SCHEMA is database2 */; 

那么你可以使用

PRAGMA database2.wal_checkpoint(FULL); 

檢查附加的數據庫。

初始數據庫的模式是主要的,但不是必需的,因為如果沒有提供模式,它是默認值。

因此,為什么c.execute('PRAGMA wal_checkpoint(FULL)')有效(就像c.execute('PRAGMA main.wal_checkpoint(FULL)') )。 即實際上是相同的。

如果您使用c.execute("PRAGMA wal_autocheckpoint = 0")那么您將必須管理所有檢查點,因為自動檢查點將被關閉(注意關閉所有數據庫連接檢查點)。

您不妨考慮:-

禁用自動檢查點機制。 在其默認配置中,當 WAL 文件超過 1000 頁時,SQLite 將在任何事務結束時檢查 WAL 文件。 但是,存在可以禁用或延遲此自動檢查點的編譯時和運行時選項。 如果應用程序禁用了自動檢查點,則沒有什么可以阻止 WAL 文件過度增長。 預寫式日志記錄 - 6. 避免過大的 WAL 文件

我建議不要使用PRAGMA wal_autocheckpoint = 0自動檢查點不會妨礙強制檢查點,除非強制檢查點發生在自動檢查點之后(並且所有頁面都被寫入)並且沒有任何更新,那么它將什么都不做(優雅地),否則更多頁面將寫入數據庫文件。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM