gpt4 book ai didi

python - 使用检查点时 sqlite3 未知数据库模式?

转载 作者:行者123 更新时间:2023-12-01 07:00:35 25 4
gpt4 key购买 nike

我得到:

sqlite3.OperationalError: unknown database schema

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

检查附加数据库。

初始数据库的架构是ma​​in,但不是必需的,因为如果未提供架构,则它是默认的。

这就是为什么 c.execute('PRAGMA wal_checkpoint(FULL)') 有效(c.execute('PRAGMA main.wal_checkpoint(FULL)')) 。即它们实际上是相同的。

如果您使用c.execute("PRAGMA wal_autocheckpoint = 0"),那么您将必须管理所有检查点,因为自动检查点将被关闭(请注意,关闭所有数据库连接检查点)。

您可能希望考虑:-

Disabling the automatic checkpoint mechanism. In its default configuration, SQLite will checkpoint the WAL file at the conclusion of any transaction when the WAL file is more than 1000 pages long. However, compile-time and run-time options exist that can disable or defer this automatic checkpoint. If an application disables the automatic checkpoint, then there is nothing to prevent the WAL file from growing excessively. Write-Ahead Logging - 6. Avoiding Excessively Large WAL Files

我建议不要使用PRAGMA wal_autocheckpoint = 0自动检查点不会妨碍强制检查点,除非强制检查点发生在自动检查点之后(并且所有页面都被写入)并且没有任何更新那么它不会(优雅地)执行任何操作,否则更多页面将被写入数据库文件。

关于python - 使用检查点时 sqlite3 未知数据库模式?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/58655597/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com