繁体   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