如何在JupyterLab中连接Django的models并访问SQLite数据库数据
问题原因
- Django默认不会直接使用模型类名作为数据库表名,默认命名规则为
[模型所属的app名称]_[模型类名小写],比如Coin模型放在名为market的app下,对应表名是market_coin,你直接查询Coin/coin/COIN都会找不到表。 - 你提供的原生SQL代码存在笔误:没有创建游标对象
cur就直接调用cur.execute,也会触发报错。
解决方案
分两种方案,按需选择:
方案1:继续使用原生SQL查询
- 先确认Coin模型所属的app名称,拼接得到正确的表名。你也可以直接在项目根目录执行
python manage.py inspectdb,从输出的建表语句中直接找到Coin对应的表名。 - 修正后的代码如下:
import sqlite3 connection = sqlite3.connect('db.sqlite3') # 补上漏写的游标创建步骤 cur = connection.cursor() # 把下面的your_app替换成你自己的app名称 for row in cur.execute('SELECT * FROM your_app_coin;'): print(row) cur.close() connection.close()
方案2(更推荐):在Jupyter中加载Django环境直接使用ORM
不用手动写SQL,和你在tasks.py中的代码写法完全兼容,无需关心表名、字段映射规则:
- 在notebook的首个代码块中执行如下代码初始化Django运行环境:
import os import django # 把my_project替换成你自己的Django项目名 os.environ.setdefault("DJANGO_SETTINGS_MODULE", "my_project.settings") django.setup()
- 后续直接导入模型执行查询即可:
# 把your_app替换成你自己的app名称 from your_app.models import Coin # 和tasks.py中的用法完全一致 all_coins = Coin.objects.all() for coin in all_coins: print(coin)
内容的提问来源于stack exchange,提问作者Tony Hoan Trinh
相关产品推荐
相关产品推荐

