AWS Lambda部署Django API遇SQLite版本及pysqlite3编译问题
解决AWS Lambda上Django 4.2.4的SQLite版本过低问题
问题根源
AWS Lambda默认提供的SQLite版本低于3.8.3,而Django 4.2.4中deterministic=True的配置要求SQLite 3.8.3+,触发NotSupportedError;手动编译安装pysqlite3失败是因为缺少编译依赖(如sqlite开发库、cmake环境)。
方案1:使用预编译的pysqlite3-binary(最快解决)
跳过编译步骤,直接用预编译的二进制包:
- 本地打包Lambda层(对应Python3.11版本):
mkdir -p python/lib/python3.11/site-packages pip install pysqlite3-binary -t python/lib/python3.11/site-packages/ zip -r pysqlite3-layer.zip python/ - 将
pysqlite3-layer.zip上传为Lambda层,并关联到你的Lambda函数 - 修改Django的启动文件(如
wsgi.py或asgi.py),在最顶部添加代码替换默认sqlite3:__import__('pysqlite3') import sys sys.modules['sqlite3'] = sys.modules.pop('pysqlite3')
方案2:禁用deterministic配置(临时测试用)
如果不需要依赖deterministic=True的功能,找到代码中设置该参数的位置(比如自定义数据库函数、models中的Func子类),将其改为deterministic=False或移除该参数。
方案3:切换到生产级数据库(长期推荐)
SQLite不适合Lambda这类无服务器生产环境,建议替换为AWS RDS(PostgreSQL/MySQL):
- 在AWS控制台创建RDS实例,配置好访问权限
- 修改Django
settings.py中的DATABASES配置:DATABASES = { 'default': { 'ENGINE': 'django.db.backends.postgresql', 'NAME': 'your-db-name', 'USER': 'your-db-user', 'PASSWORD': 'your-db-password', 'HOST': 'your-rds-endpoint', 'PORT': '5432', } } - 打包时确保安装对应数据库的驱动(如
psycopg2-binary)
内容的提问来源于stack exchange,提问作者Brian
相关产品推荐
相关产品推荐

