如何让ADBC SQLite连接共享并访问SQLite3内存数据库中的表?
如何让ADBC SQLite连接共享并访问SQLite3内存数据库中的表?
看起来你遇到的问题核心是共享内存连接的配置细节、事务可见性,再加上代码里的几个小语法错误,导致ADBC连接看不到sqlite3创建的表。我来一步步帮你排查解决:
先修正代码里的基础语法错误
你的测试代码里有两处明显的低级问题,先改掉它们:
- 重复的
import:import import adbc_driver_sqlite.dbapi应该改成import adbc_driver_sqlite.dbapi as arrowdb - 变量名错误:
data.arrow_cursor.execute(...)应该是arrow_cursor.execute(...),你并没有定义data这个变量
核心问题:共享内存的一致性与事务可见性
SQLite的共享内存跨连接访问需要两个关键前提,之前的尝试大概率是没满足这些要求:
1. 用完全一致的共享内存URI
file::memory:?cache=shared 虽然是标准写法,但不同驱动对参数解析可能有细微差异。建议用带具体标识的URI,比如file:shared_mem_db?mode=memory&cache=shared&uri=true,这样两个连接的共享标识更明确,不会出现匹配不上的情况。
2. 确保sqlite3的表操作提交事务
默认情况下,sqlite3会把DDL(比如CREATE TABLE)放在隐式事务里,如果不手动提交,其他共享连接完全看不到这个表的存在。所以创建表或插入数据后,一定要调用memory_conn.commit()。
3. 正确获取ADBC查询的结果
ADBC的cursor执行查询后不会直接返回数据,你需要用fetch_arrow_table()(或fetchall())来获取实际结果,直接打印cursor是看不到表信息的。
修正后的完整可运行代码
import adbc_driver_sqlite.dbapi as arrowdb import sqlite3 # 定义统一的共享内存URI,两个连接必须完全一致 shared_mem_uri = "file:shared_mem_db?mode=memory&cache=shared&uri=true" # 1. 先通过sqlite3连接创建表并提交事务 memory_conn = sqlite3.connect(shared_mem_uri, uri=True) memory_cursor = memory_conn.cursor() # 创建测试表并插入数据 memory_cursor.execute("CREATE TABLE example_table (id INTEGER PRIMARY KEY, name TEXT)") memory_cursor.execute("INSERT INTO example_table VALUES (1, 'test_1'), (2, 'test_2')") # 必须提交事务,否则ADBC连接看不到表 memory_conn.commit() # 2. 用同一个URI创建ADBC连接 arrow_conn = arrowdb.connect(shared_mem_uri) arrow_cursor = arrow_conn.cursor() # 3. 测试查看所有表 tables_result = arrow_cursor.execute("SELECT name FROM sqlite_master WHERE type = 'table'").fetch_arrow_table() print("ADBC连接可见的表:") print(tables_result.to_pandas()) # 转成DataFrame方便查看 # 4. 测试查询example_table data_result = arrow_cursor.execute("SELECT * FROM example_table").fetch_arrow_table() print("\nexample_table中的数据:") print(data_result.to_pandas())
额外注意事项
- 确保ADBC SQLite驱动是最新版本:旧版本可能对共享内存URI的支持不完善,可通过
pip install --upgrade adbc-driver-sqlite升级。 - 不要随意修改URI参数的顺序或拼写,两个连接的URI必须完全一致,包括所有参数。
- 如果你的实际代码涉及复杂的表操作,所有DDL/DML操作都要记得提交事务,否则跨连接的可见性会出问题。
备注:内容来源于stack exchange,提问作者Desmond Spicer
相关产品推荐
相关产品推荐

