【问题标题】:Python using another module to get data from mysql serverPython使用另一个模块从mysql服务器获取数据
【发布时间】:2013-09-10 11:09:14
【问题描述】:

我有 2 个 py 文件。 database.pymyapp.py。从myapp.py,我想调用database.py 来创建连接,并执行mysql 查询,但我不希望关闭与数据库的连接,因为我需要重用它。这是我的代码。

谁能给我一些建议?

database.py

import mysql.connector
from flask import g

def connect_db():
    return mysql.connector.connect(user='root', password='password', database='test')

def get_db():
    db = getattr(g, '_database', None)
    if db is None:
        #db = g._database = connect_to_database()
        db = g._database = connect_db()
    return db    

def query_db(query, args=(), one=False):
    cur = get_db().execute(query, args)
    rv = cur.fetchall()
    cur.close()
    return (rv[0] if rv else None) if one else rv

myapp.py

from flask import g
from database import connect_db, query_db

for user in query_db('select * from users'):
    print(user['userid'], 'has the password', user['password'])

这是完整的跟踪

Traceback (most recent call last):
  File "test.py", line 4, in <module>
    for user in query_db('select * from users'):
  File "/root/projects/test2/database.py", line 15, in query_db
    cur = get_db().execute(query, args)
  File "/root/projects/test2/database.py", line 8, in get_db
    db = getattr(g, '_database', None)
  File "/opt/python3/lib/python3.3/site-packages/werkzeug/local.py", line 338, in __getattr__
    return getattr(self._get_current_object(), name)
  File "/opt/python3/lib/python3.3/site-packages/werkzeug/local.py", line 297, in _get_current_object
    return self.__local()
  File "/opt/python3/lib/python3.3/site-packages/flask/globals.py", line 27, in _lookup_app_object
    raise RuntimeError('working outside of application context')
RuntimeError: working outside of application context

【问题讨论】:

  • 您从您似乎不理解的代码中复制/粘贴了很多内容,并导致您出现这些错误。可能你应该慢慢read again flask doc 并尝试首先使用 SQLite,一旦没问题就切换到 MySQL
  • 嗨...你能帮忙再看看这段代码吗?

标签: python mysql database mysql-connector connection


【解决方案1】:

您应该为您的 query_db 函数创建一个应用程序上下文。也可以看看: How do I modify the DB from Flask without posting?

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2019-09-29
    • 1970-01-01
    • 2014-03-10
    • 2016-12-14
    • 1970-01-01
    • 2019-06-20
    相关资源
    最近更新 更多