You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何让SQLite支持db.schema.table格式查询以适配测试代码?

实现SQLite支持db.schema.table三级命名查询的方案

SQLite原生不支持PostgreSQL/Databricks那样的多层schema结构,它的命名规则仅支持[数据库名.]表名的二级格式。要让select * from db.schema.table这类查询正常执行,且不修改原查询语句,可采用以下两种方案:

方案1:用表名包含点的方式模拟三级结构

无需额外扩展,直接利用SQLite允许表名包含特殊字符(需用双引号定义)的特性,将schema.table作为完整表名创建在db数据库下,让原查询语句匹配到目标表。

修正后的Python代码示例:

import sqlite3

mock_db = sqlite3.connect(":memory:")
cursor = mock_db.cursor()

# 附加共享内存数据库作为db(避免独立内存实例无法共享数据)
cursor.execute("ATTACH DATABASE 'file::memory:?cache=shared' AS db")

# 在db数据库中创建表名带点的表
cursor.execute('CREATE TABLE db."schema.table" ("Column1" TEXT, "Column2" INTEGER)')

# 插入测试数据
cursor.execute('INSERT INTO db."schema.table" VALUES (?, ?)', ('测试文本', 100))
mock_db.commit()

# 执行原查询语句
cursor.execute('select * from db.schema.table')
print(cursor.fetchall())  # 输出:[('测试文本', 100)]

cursor.close()
mock_db.close()

方案2:使用SQLite扩展原生支持Schema

借助sqlean扩展集合中的schema模块,让SQLite支持类似PostgreSQL的schema概念,从而原生适配三级命名查询。

步骤:

  1. 安装sqlean扩展:pip install sqlean.py
  2. 加载扩展并创建schema结构

代码示例:

import sqlite3
import sqlean

mock_db = sqlite3.connect(":memory:")
# 加载schema扩展
sqlean.load(mock_db, "schema")

cursor = mock_db.cursor()

# 附加共享内存数据库作为db
cursor.execute("ATTACH DATABASE 'file::memory:?cache=shared' AS db")
# 在db数据库下创建schema
cursor.execute("CREATE SCHEMA db.schema")
# 在schema中创建目标表
cursor.execute('CREATE TABLE db.schema.table ("Column1" TEXT, "Column2" INTEGER)')

# 插入测试数据
cursor.execute('INSERT INTO db.schema.table VALUES (?, ?)', ('扩展测试', 200))
mock_db.commit()

# 执行原查询语句
cursor.execute('select * from db.schema.table')
print(cursor.fetchall())  # 输出:[('扩展测试', 200)]

cursor.close()
mock_db.close()

原代码错误修正

你提供的代码存在两处问题:

  • cursor.create是错误方法,应改为cursor.execute
  • 直接附加:memory:会创建独立内存数据库,建议使用file::memory:?cache=shared确保数据共享

内容的提问来源于stack exchange,提问作者ic_fl2

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.06.19 09:21:17