将mysql python函数导入到不同的目录中(ModuleNotFoundError)

6 浏览
0 Comments

将mysql python函数导入到不同的目录中(ModuleNotFoundError)

SOS。我正在将我的SQLite数据库迁移到MySQL,并希望使用/db/connect.py中的函数在/app/app.py中与我的应用程序共享MySQL连接。我正在使用一个临时文件来测试连接/app/test.py,其中包含函数导入。来自/db/connect.py的连接单独运行成功。然而,即使遵循其他指南,我的/db/connect.py中的函数也无法正确导入。即使在/db/目录中添加一个空的__init__.py文件。

我尝试过的

这里是我尝试过的一小部分这里这里这里这里(以及stackoverflow上此主题的所有其他问题,例如这里这里这里这里等)。

/db/test.py (临时文件,带有import函数)

导入/db/connect.py > sql_db_connection()。

from db.connect import sql_db_connection
import db
def get_all():
    conn = sql_db_connection()
    cursor = conn.cursor()
    cursor.execute("select * from posts")
    result = cursor.fetchall()
    for x in result:
        print(x)

错误(运行test.py时出现错误)

Traceback (most recent call last):
  File "/Users///app/test.py", line 1, in 
    from db.connect import sql_db_connection
ModuleNotFoundError: No module named 'db'

/db/connect.py(mysql连接函数)

import sshtunnel
import MySQLdb
import os
from dotenv import load_dotenv
# Load all env vars
load_dotenv()
def sql_db_connection():
    sshtunnel.SSH_TIMEOUT = 5.0
    sshtunnel.TUNNEL_TIMEOUT = 5.0
    with sshtunnel.SSHTunnelForwarder(
        ('ssh.pythonanywhere.com'),
        ssh_username=os.getenv("REMOTE_DB_SSH_USERNAME"), ssh_password=os.getenv("REMOTE_SSH_PASSWORD"),
        remote_bind_address=(
            os.getenv("REMOTE_BIND_ADDRESS"), 3306)
    ) as tunnel:
        conn = MySQLdb.connect(
            user=os.getenv("REMOTE_DB_SSH_USERNAME"),
            passwd=os.getenv("REMOTE_DB_PASSWORD"),
            host='0.0.0.0', port=tunnel.local_bind_port,
            db=os.getenv("REMOTE_DB_NAME"),
        )
        print('Connected!')
        return conn
sql_db_connection()

.
├── Dockerfile
├── README.md
├── __pycache__
│   ├── app.cpython-310.pyc
│   ├── app.cpython-39.pyc
│   ├── config.cpython-39.pyc
│   ├── wsgi.cpython-38.pyc
│   └── wsgi.cpython-39.pyc
├── app
│   ├── Dockerfile
│   ├── __init__.py
│   ├── __pycache__
│   ├── app.py
│   ├── config.py
│   ├── public
│   ├── requirements.txt
│   ├── templates
│   ├── test.py
│   └── wsgi.py
├── db
│   ├── Dockerfile
│   ├── README.md
│   ├── __init__.py
│   ├── __pycache__
│   ├── connect.py
│   ├── database.db
│   ├── dump.sql
│   ├── init_db.py
│   ├── mysql_dump.sql
│   ├── schema.sql
│   └── schema_mysql.sql
├── docker-compose.yml
├── features.md
├── images
├── requirements.txt
├── setup.py
├── venv
│   ├── bin
│   ├── include
│   ├── lib
│   ├── man
│   └── pyvenv.cfg
└── wsgi.py

admin 更改状态以发布 2023年5月23日
0
0 Comments

将这两行作为 test.py 的前两行添加:

import sys
sys.path.append('/Users//')

0