当我使用python 2.7运行我的脚本时,我正在运行一个烧瓶应用程序并使用Flask-mysqlAlchemy连接到数据库我收到以下错误。
Traceback (most recent call last):
File "app2.py", line 8, in <module>
from database.dbconfig import db, myAccounts2
ImportError: No module named database.dbconfig
虽然这在python3中正常运行但我需要在python 2.7中运行,因为我的服务器已经预先安装了它。我无法弄清问题是什么。我已经在我的服务器中安装了所有依赖项,并继续使用python3在本地计算机上工作。
这是我的主要脚本
我的目录是这样的
Main folder
|
+--->database
| |
| +------> dbconfig.py
|
+----->app2.py
这是我的app2.py
#!usr/bin/python
import boto3
import json
import urllib2
import urlparse
#import urllib.request
#import urllib.parse
from database.dbconfig import db, myAccounts2
from flask_sqlalchemy import SQLAlchemy
from flask import Flask,render_template,jsonify,json,request
application = Flask(__name__)
这是我的dbconfig.py
from flask import Flask
from flask_sqlalchemy import SQLAlchemy
app = Flask(__name__)
app.config['SQLALCHEMY_DATABASE_URI'] = 'mysql+pymysql://root:password@pushbuttontest.us-east-1.rds.amazonaws.com:3306/test_pb'
app.config['SQLALCHEMY_TRACK_MODIFICATIONS']= 'False'
app.config['SECRET_KEY'] = "random string22"
db = SQLAlchemy(app)
class myAccounts2(db.Model):
#__tablename__ = 'myAccounts'
id = db.Column(db.Integer, primary_key=True)
account_name = db.Column(db.String(45), primary_key=True)
vpc = db.Column(db.String(55))
subnet = db.Column(db.String(55))
instance_type = db.Column(db.String(90))
def __init__(self, account_name, vpc, subnet, instance_type):
#self.id = id
self.account_name = account_name
self.vpc=vpc
self.subnet=subnet
self.instance_type=instance_type
答案 0 :(得分:2)
我认为使用Python 2,你必须放一个空的
__init__.py
文件 在您的数据库目录中
答案 1 :(得分:0)
首先,您的数据库文件夹不是合适的python包。
Python中的每个包都是一个必须包含一个名为
__init__.py.
的特殊文件的目录。这个文件可以是空的,它表示它包含的目录是一个Python包,因此它可以以相同的方式导入模块可以导入。 From learn python website
第二个(这只是一个建议),要强制执行正确的命名空间,您应该在项目目录中创建一个以应用程序命名的包,并在所有其他包之上:
myproject/
requirements.txt
setup.cfg
...
myapp/
__init__.py
app2.py
database/
__init__.py
dbconfig.py
请注意,包名称double应始终为小写,如果需要,请使用下划线作为分隔符而不是破折号。
命名空间将是:
myapp.database.dbconfig.db
所以从app2.py可以做到例如:
from .database.dbconfig import db
此外,您的代码在app2.py和dbconfig.py中声明了flask对象。
因此,app2.py模块中的application
对象未绑定到Sqlalchemy对象。您应该在dbconfig中声明您的db,然后在app2.py中导入它并使用init_app方法。
最后
flat比嵌套
更好
因此,这个树可以简化为只包含模型和db对象的database.py以及myapp/__init__.py