我有一个名为testing_file.py的python文件:
from datetime import datetime
import MySQLdb
# Open database connection
class DB():
def __init__(self, server, user, password, db_name):
db = MySQLdb.connect(server, user, password, db_name )
self.cur = db.cursor()
def time_statistic(self, start_date, end_date):
time_list = {}
sql = "SELECT activity_log.datetime, activity_log.user_id FROM activity_log"
self.cur.execute(sql)
self.date_data = self.cur.fetchall()
for content in self.date_data:
timestamp = str(content[0])
datetime_object = datetime.strptime(timestamp, '%Y-%m-%d %H:%M:%S')
timestamps = datetime.strftime(datetime_object, "%Y-%m-%d")
if start_dt <= timestamps and timestamps <= end_dt:
if timestamps not in time_list:
time_list[timestamps]=1
else:
time_list[timestamps]+=1
return json.dumps(time_list)
start_date = datetime.strptime(str('2017-4-7'), '%Y-%m-%d')
start_dt = datetime.strftime(start_date, "%Y-%m-%d")
end_date = datetime.strptime(str('2017-5-4'), '%Y-%m-%d')
end_dt = datetime.strftime(end_date, "%Y-%m-%d")
db = DB("host","user_db","pass_db","db_name")
db.time_statistic(start_date, end_date)
我想使用Flask通过API访问结果(time_list)
。这是我到目前为止所写的,不起作用,我也尝试过另一种方式:
from flask import Flask
from testing_api import *
app = Flask(__name__)
@app.route("/")
def get():
db = DB("host","user_db","pass_db","db_name")
d = db.time_statistic()
return d
if __name__ == "__main__":
app.run(debug=True)
问题:这是我第一次使用API和Flask。任何人都可以通过这个来帮助我。任何提示都表示赞赏。谢谢
我有空列表作为结果{}
答案 0 :(得分:1)
你做的事情有很多不妥之处。
1&GT; def get(self, DB)
为什么self
?此功能不属于某个类。它不是实例函数。 self是调用实例方法时类实例的引用。这里不仅不需要,而且简单而且简单错误。
2&GT;如果您稍微研究一下flask的路由声明,您将看到如何使用参数声明路由。这是link。从本质上讲你应该是这样的
@app.route("/path/<variable>")
def route_func(variable):
return variable
3&GT;最后,还有一件事我想提一下,请不要调用常规python文件test_<filename>.py
,除非您打算将它用作单元测试文件。这非常令人困惑。
哦,你已经从你的模块中导入了DB,不需要将它作为参数传递给函数。无论如何它应该在里面可用。
答案 1 :(得分:0)
在你的代码中有很多错误(从“无用和不清楚”到“完全错误”)。
wrt / TypeError
:正如错误消息所示,您的get()
函数需要两个不会被Flask传递的参数(self
和DB
) - 并且实际上并没有在函数中使用。删除这两个参数,你将摆脱这个错误 - 只是为了发现你现在在NameError
函数的第一行有一个get()
(显然,因为你没有导入{{1} }也未定义time_statistic
和start_date
)。