【问题标题】:I get the error in my api maybe about pymysql.connect but I don't know what happened我的 api 中的错误可能与 pymysql.connect 有关,但我不知道发生了什么
【发布时间】:2021-06-21 11:30:01
【问题描述】:

我正在制作关于 mysql 输出数据的 api。我按照此链接执行此操作,但出现类型错误。 https://flask.palletsprojects.com/en/2.0.x/config/ 我不知道我的代码有什么问题。我试图解决这个问题。我点击此链接How do I save database configuration without writting them on my python file,但仍然无法正常工作。

# -*- coding: utf-8 -*-
from flask import Flask, g, render_template, request, jsonify, json, current_app
import pymysql
import pymysql.cursors
from flask_sqlalchemy import SQLAlchemy
import flask
from global_setup import *

app = Flask(__name__)

def connect_db():
    return pymysql.connect(MY_DB_SERVER,
                            MY_DB_USER,
                            MY_DB_PASS,
                            MY_DB_DB,
                            MY_DB_PORT,
                            charset='utf8',
                            cursorclass=pymysql.cursors.DictCursor)

def get_db():
    '''Opens a new database connection per request.'''      
    if not hasattr(g, 'db'):
        g.db = connect_db()
    return g.db

@app.teardown_appcontext
def close_db(error):
    '''Closes the database connection at the end of request.''' 
    if hasattr(g, 'db'):
        g.db.close()

@app.route('/api/CRM',methods = ['POST'])
def index1():
    cursor = get_db().cursor()
    cursor.execute("select * from customer")
    rows = cursor.fetchall()
    return jsonify(rows)

if __name__ == '__main__':
    app.config['JSON_AS_ASCII'] = False
    app.run(debug=True, host='0.0.0.0', port=5000)

错误:

127.0.0.1 - - [21/Jun/2021 18:40:29] "POST /api/CRM HTTP/1.1" 500 -
Traceback (most recent call last):
  File "/usr/local/lib/python3.6/site-packages/flask/app.py", line 2088, in __call__
    return self.wsgi_app(environ, start_response)
  File "/usr/local/lib/python3.6/site-packages/flask/app.py", line 2073, in wsgi_app
    response = self.handle_exception(e)
  File "/usr/local/lib/python3.6/site-packages/flask/app.py", line 2070, in wsgi_app
    response = self.full_dispatch_request()
  File "/usr/local/lib/python3.6/site-packages/flask/app.py", line 1515, in full_dispatch_request
    rv = self.handle_user_exception(e)
  File "/usr/local/lib/python3.6/site-packages/flask/app.py", line 1513, in full_dispatch_request
    rv = self.dispatch_request()
  File "/usr/local/lib/python3.6/site-packages/flask/app.py", line 1499, in dispatch_request
    return self.ensure_sync(self.view_functions[rule.endpoint])(**req.view_args)
  File "/home/Teemo.Tsui/git/KF/api_123.py", line 34, in index1
    cursor = get_db().cursor()
  File "/home/Teemo.Tsui/git/KF/api_123.py", line 23, in get_db
    g.db = connect_db()
  File "/home/Teemo.Tsui/git/KF/api_123.py", line 18, in connect_db
    cursorclass=pymysql.cursors.DictCursor)
TypeError: __init__() takes 1 positional argument but 6 positional arguments (and 2 keyword-only arguments) were given

这是我的 global_setup.py

MY_DB_SERVER = ""
MY_DB_USER = ""
MY_DB_PASS = ""
MY_DB_DB = ""
MY_DB_PORT = 3306

【问题讨论】:

    标签: python python-3.x flask


    【解决方案1】:

    看起来pymysql.connect args 需要命名,所以:

    def connect_db():
        return pymysql.connect(host=MY_DB_SERVER,
                                user=MY_DB_USER,
                                password=MY_DB_PASS,
                                database=MY_DB_DB,
                                port=MY_DB_PORT,
                                charset='utf8',
                                cursorclass=pymysql.cursors.DictCursor)
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2014-02-16
      • 2021-10-16
      • 1970-01-01
      相关资源
      最近更新 更多