我在通过谷歌云连接到Python Flask应用程序中的mysql时遇到问题。
我的应用程序在本地运行。我在
localhost
上运行该应用程序,提交一个 Web 表单,并将内容上传到我在 AWS 上运行的 mysql 数据库。
对于
DB_HOST
、DB_PASS
等,我将它们放在 .env
文件中,然后将它们与其他包一起加载,如
from flask import Flask, render_tempalate, request
from jinja1 import Environment, FileSystemLoader
import os
from dotenv import load_dotenv
import mysql.connector
load_dotenv()
当我尝试通过
gcloud app deploy
将应用程序上传到谷歌云时,它给了我错误
from dotenv import load_dotenv
ModuleNotFoundError: No module named 'dotenv'
[2024-01-22 15:17:50 +0000] [9] [INFO] Worker exiting (pid: 9)
[2024-01-22 15:17:50 +0000] [1] [INFO] Shutting down: Master
[2024-01-22 15:17:50 +0000] [1] [INFO] Reason: Worker failed to boot.
我注释掉了
from dotenv...
和load_dotenv()
,并将MySQL连接的环境变量存储在谷歌云本身中。现在我的导入看起来像这样
from flask import Flask, render_tempalate, request
from jinja1 import Environment, FileSystemLoader
import os
# from dotenv import load_dotenv
import mysql.connector
# load_dotenv()
我将应用程序重新部署到谷歌云,然后收到此错误
...
import mysql.connector
ModuleNotFoundError: No module named 'mysql'
...
我很困惑,因为我在谷歌云为我创建的
mysql
文件夹中有一个 env
包。我通过谷歌云上的一个简单的网络教程开始了这个项目。
另外,当我运行
pip install mysql-connector-python
时它会返回
Requirement already satisfied: mysql-connector-python in c:\users\me\appdata\local\programs\python\python312\lib\site-packages (8.3.0)
我在谷歌云上研究了MySQL,它使用了很多
sqlalchemy
,尽管我对此并不熟悉,如果可能的话,我更愿意使用mysql.connector
。
我将数据库称为
dataBase = mysql.connector.connect(
host=os.environ['DB_HOST'],
...
然后
def saveData(args)
query = "..."
vals = (...)
cursorObject = dataBase.cursor()
cursorObject.execute(query, vals)
...
我的
app.yaml
文件是
runtime: python
env: flex
entrypoint: gunicorn -b :$PORT main:app
runtime_config:
operating_system: ubuntu22
manual_scaling:
instance: 1
resources:
cpu: 1
memory_gb: 0.5
disk_size_gb: 10
我的
.gitignore
文件是
.env
.env*local
我的
requirements.txt
是
Flask==3.0.0; python_version > '3.6'
Flask==2.3.3; python_version < '3.7'
Werkzeug==3.0.1; python_version > '3.6'
Werkzeug==2.3.7; python_version < '3.7'
gunicorn==20.1.0
我的
gcloud
版本是
Google Cloud SDK 460.0.0
bq 2.0.101
core 2021.01.12
gcloud-crc32c 1.0.0
gsutil 5.27
我的目录结构是
myproject
|
|--env
| |
| +--Include
| +--Lib
| | |
| | +site-packages
| | |...
| | +--mysql
| |
| +--Scripts
| +--pyvenv.cfg
|
|--static
|--templates
|--.env
|--.flaskenv
|--.gitignore
|--app.yaml
|--main.py
|--requirements.txt
无论如何,感谢您的帮助。
我意识到我需要更新
requirements.txt
。这就是将软件包安装在与我自己的系统不同的系统上的原因。
现在我的
requirements.txt
是
Flask==3.0.0; python_version > '3.6'
Flask==2.3.3; python_version < '3.7'
Werkzeug==3.0.1; python_version > '3.6'
Werkzeug==2.3.7; python_version < '3.7'
gunicorn==20.1.0
mysql-connector-python==8.3.0
python-dotenv==1.0.1
并且我取消了
from dotenv import load_dotenv
和 load_dotenv()
的注释。我的完整导入声明是
from flask import Flask, render_template, request
from jinja2 import Environment, FileSystemLoader
import os
from dotenv import load_dotenv
import mysql.connector
我的
pyvenv.cfg
文件是
home = C:\Python310
include-system-site-packages = false
version = 3.10.7
现在可以了!