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

如何从独立脚本读取Python创建的内存SQLite数据库数据至DataFrame

问题结论

你当前使用默认参数创建的内存SQLite数据库,无法直接从另一个独立脚本中读取数据。原因是sqlite://对应的是进程私有临时内存空间,原脚本进程退出后数据会直接被释放,且其他独立脚本(归属于不同进程)默认没有权限访问该专属内存区域。

如果要实现跨脚本读取数据库数据,可选以下两种成熟方案:

方案1:改用持久化磁盘SQLite数据库(最推荐,稳定性最高)

该方案改造成本极低,仅需修改数据库连接地址为磁盘路径,两个脚本访问同一个数据库文件即可实现数据互通,进程退出后数据也不会丢失。

原写入脚本修改点

仅需调整引擎创建代码,其余写入逻辑无需改动:

import pandas as pd
from sqlalchemy import create_engine

# 数据会持久化保存在当前目录下的my_db.db文件中
engine = create_engine('sqlite:///my_db.db', echo=False)

# 以下原有写入逻辑保持不变
df = pd.DataFrame({'name' : ['User 1', 'User 2', 'User 3']})
df.to_sql('users', con=engine)
with engine.begin() as connection:
    df1 = pd.DataFrame({'name' : ['User 4', 'User 5']})
    df1.to_sql('users', con=connection, if_exists='append')
df2 = pd.DataFrame({'name' : ['User 6', 'User 7']})
df2.to_sql('users', con=engine, if_exists='append')

print('数据写入完成')

独立读取脚本实现

直接连接同一个磁盘数据库文件,用pandas内置方法读取表数据即可:

import pandas as pd
from sqlalchemy import create_engine

# 连接同一个磁盘数据库文件
engine = create_engine('sqlite:///my_db.db', echo=False)
# 读取users表数据到新的DataFrame
new_df = pd.read_sql("SELECT * FROM users", con=engine)
print(new_df)

方案2:使用共享内存SQLite(仅适合临时内存运行场景)

如果你确实要求数据全程不落地磁盘,可以开启SQLite的共享内存模式,注意该方案要求原写入脚本必须持续运行不能退出,一旦原脚本进程终止,数据会全部丢失。

原写入脚本修改点

调整引擎创建参数开启共享内存:

# 开启共享内存模式,同主机其他进程可通过相同URI访问该内存库
engine = create_engine('sqlite:///file::memory:?cache=shared', echo=False, connect_args={'uri': True})
# 其余写入逻辑保持不变

独立读取脚本实现

使用相同的共享内存URI连接即可读取数据:

import pandas as pd
from sqlalchemy import create_engine

# 用相同URI连接共享内存库,必须添加uri=True参数
engine = create_engine('sqlite:///file::memory:?cache=shared', echo=False, connect_args={'uri': True})
new_df = pd.read_sql("SELECT * FROM users", con=engine)
print(new_df)

注意:共享内存模式稳定性远低于磁盘持久化方案,仅适合临时数据交换场景使用。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.10.03 15:54:03