自己写的Flask mysql操作类出错?

操作类如下

#coding=utf-8
import MySQLdb as sDB
class DBc:
    dbs=None
    con=None
    cur=None
    def __init__(self,Mysql_I):        
        self.dbs=Mysql_I
        self.con=sDB.connect(self.dbs['DB_HOST'] , self.dbs['DB_USER'],self.dbs['DB_PASS'], self.dbs['DB_TABLE'])
        self.cur=self.con.cursor()    
    def QueryS(self,sql):
        res=self.cur.execute(sql)
        self.con.commit()
        self.cur.close()
        self.con.close()
        return res
        

然后在另外一个文件里这样调用

@app.route("/")
def hello():
    ss=DBc(bst)
    s=ss.QueryS("INSERT INTO test(Name) VALUES('testName1521')")
    return s

运行时出错,但数据确实写到了数据库里
主要的错误信息是:
TypeError: 'long' object is not callable
看了好久都不知道哪里错了,网上找大多都是用的flask_sqlalchemy,很少直接用mysql的,我觉得写这样一个小博客用不着那些东西,希望大家能指导下,谢谢了.

阅读 3.6k
1 个回答

注意: execute 返回的并不是查询结果,而是影响的行数(affected rows)

而flask的视图函数只能接受字符串或response对象作为返回值(详见: http://flask.pocoo.org/docs/0.10/quickstart/#about-responses ),从而引发了这个错误

关于MySQL-python的正确使用方法,参考: http://mysql-python.sourceforge.net/MySQLdb-1.2.2/


另建议:

  • 你在querys中关闭了数据库链接,这样一来下次调用就会报错

  • 不要将connection等定义为类属性,否则它们会被多个实例对象共享。抑或者你可以使用单例模式(见: http://stackoverflow.com/questions/6760685/creating-a-singleton-in-python

  • 尝试自己封装数据链接,这种精神值得鼓励。但仅仅能应用于个人学习中。真正的产品,无论规模,釆用一套成熟的框架都是必须的。SQLAlchemy很优秀,也很值得学习

  • 规范化你的命名,不然你会后悔的

撰写回答
你尚未登录,登录后可以
  • 和开发者交流问题的细节
  • 关注并接收问题和回答的更新提醒
  • 参与内容的编辑和改进,让解决方法与时俱进
推荐问题
宣传栏