我正在使用Python / Flask编写用于大学分配的Web应用程序,并且为了使app.py文件保持整洁,我具有一个查询存储在另一个文件中的数据库的功能。该函数使用pymysql和json模块,我无法设法以使其工作的方式加载它们-我不断收到属性错误,指出未定义pymysql。
我尝试将导入语句放入模块文件(DBjson.py),模块所包含的函数以及app.py中。这是我的模块代码:
def fetchFromDB(host,port,dbname,user,password,query,jsonString=False):
import pymysql # these import statements are in the function in this example - one of several places I've tried them!
import json
conn = pymysql.connect(host, user=user,port=port, passwd=password, db=dbname)
cursorObject = conn.cursor(pymysql.cursors.DictCursor)
with cursorObject as cursor:
cursor.execute(query)
result = cursor.fetchall()
conn.close()
if jsonString == True:
try:
for i in range(len(result)):
result[i]['dateTime'] = result[i]['dateTime'].strftime('%Y-%m-%d %H:%M')
except:
pass
result = json.dumps(result)
return result
以及来自我的app.py的路线:
import pymysql
import json
@app.route('/')
def index():
wds = DBjson.fetchFromDB(host,port,dbname,user,password,weatherQuery)
bds = DBjson.fetchFromDB(host,port,dbname,user,password,bikesQuery)
return render_template('weatherDateTime.html', wds=wds, bds=bds)
对如何使这项工作有帮助吗?
谢谢!
edit-我编写了一个测试脚本,可以从中加载模块并运行函数,没问题-DBDB.py模块文件的开头和函数外部都有导入语句。这是我不知道的Flask / scoping的怪癖吗?
PS-感谢您到目前为止的所有答复
import DBjson
query = "SELECT * FROM dublinBikesInfo WHERE dateTime LIKE (SELECT MAX(datetime) FROM dublinBikesInfo);"
#login details for AWS RDS DB
host="xyza"
port=3306
dbname="xyza"
user="xyza"
password="xyza"
a = DBjson.fetchFromDB(host,port,dbname,user,password,query)
print(a)
答案 0 :(得分:0)
您好,您的代码中存在一个缩进错误,所有语句都必须位于您之前创建的函数/方法中。
`def method():
#code here`
在页面的开始定义函数/方法之前也尝试导入库的内容也是不错的!
在您的情况下,请将所有与函数/方法相关的语句放入函数/方法中!
答案 1 :(得分:0)
Python对于缩进非常宽容。您的模块代码缩进不正确。
执行此操作的正确方法是:
def Function():
#your code indented in here