首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >TypeError连接:TypeError()参数%3必须是字符串,而不是列表

TypeError连接:TypeError()参数%3必须是字符串,而不是列表
EN

Stack Overflow用户
提问于 2021-05-11 07:49:20
回答 1查看 94关注 0票数 0

我是python,sqlalchemy和flask的新手。现在,我正在尝试执行一个简单的数据库插入程序,其中将artist_name插入到我已经创建的数据库中。

代码语言:javascript
复制
from flask import Flask, render_template, request, redirect
from flask_mysqldb import MySQL
import yaml
app = Flask(__name__)
db = yaml.load(open('db.yaml'))
app.config['MYSQL_HOST'] = db['mysql_host']
app.config['MYSQL_USER'] = db['mysql_user']
app.config['MYSQL_PASSWORD'] = ['mysql_password']
app.config['MYSQL_DB'] = ['mysql_db']
mysql = MySQL(app)
@app.route('/', methods=['GET', 'POST'])
def index():
    if request.method == 'POST':
        # Fetch form data
        userDetails = request.form
        artist_name = userDetails['artist_name']
        
        cur = mysql.connection.cursor()
        cur.execute("INSERT INTO p_artist ( artist_name) VALUES (%s)", (artist_name))
        mysql.connection.commit()
        cur.close()
        return 'inserted'
        
    return render_template('index.html')
if __name__ == '__main__':
    app.run(debug=True)
代码语言:javascript
复制
HTML
 <form method="POST" action="">
    <br>
      artist_name <input type="text" name="artist_name" />
    <br>
      <input type="submit">
   </form>
代码语言:javascript
复制
db.yaml

mysql_host: 'localhost'
mysql_user: 'root'
mysql_password: 
mysql_db:** 

这是类型错误

代码语言:javascript
复制
TypeError
TypeError: connect() argument 3 must be str, not list
Traceback (most recent call last)
    File "C:\Users\luvch\AppData\Local\Packages\PythonSoftwareFoundation.Python.3.9_qbz5n2kfra8p0\LocalCache\local-packages\Python39\site-packages\flask\app.py", line 2464, in __call__
    return self.wsgi_app(environ, start_response)
    File "C:\Users\luvch\AppData\Local\Packages\PythonSoftwareFoundation.Python.3.9_qbz5n2kfra8p0\LocalCache\local-packages\Python39\site-packages\flask\app.py", line 2450, in wsgi_app
                try:
                    ctx.push()
                    response = self.full_dispatch_request()
                except Exception as e:
                    error = e
                    response = self.handle_exception(e)
                except:  # noqa: B001
                    error = sys.exc_info()[1]
                    raise
                return response(environ, start_response)
            finally:
    File "C:\Users\luvch\AppData\Local\Packages\PythonSoftwareFoundation.Python.3.9_qbz5n2kfra8p0\LocalCache\local-packages\Python39\site-packages\flask\app.py", line 1867, in handle_exception
    reraise(exc_type, exc_value, tb)
    File "C:\Users\luvch\AppData\Local\Packages\PythonSoftwareFoundation.Python.3.9_qbz5n2kfra8p0\LocalCache\local-packages\Python39\site-packages\flask\_compat.py", line 39, in reraise
    raise value
    File "C:\Users\luvch\AppData\Local\Packages\PythonSoftwareFoundation.Python.3.9_qbz5n2kfra8p0\LocalCache\local-packages\Python39\site-packages\flask\app.py", line 2447, in wsgi_app
    response = self.full_dispatch_request()
    File "C:\Users\luvch\AppData\Local\Packages\PythonSoftwareFoundation.Python.3.9_qbz5n2kfra8p0\LocalCache\local-packages\Python39\site-packages\flask\app.py", line 1952, in full_dispatch_request
    rv = self.handle_user_exception(e)
    File "C:\Users\luvch\AppData\Local\Packages\PythonSoftwareFoundation.Python.3.9_qbz5n2kfra8p0\LocalCache\local-packages\Python39\site-packages\flask\app.py", line 1821, in handle_user_exception
    reraise(exc_type, exc_value, tb)
    File "C:\Users\luvch\AppData\Local\Packages\PythonSoftwareFoundation.Python.3.9_qbz5n2kfra8p0\LocalCache\local-packages\Python39\site-packages\flask\_compat.py", line 39, in reraise
    raise value
    File "C:\Users\luvch\AppData\Local\Packages\PythonSoftwareFoundation.Python.3.9_qbz5n2kfra8p0\LocalCache\local-packages\Python39\site-packages\flask\app.py", line 1950, in full_dispatch_request
    rv = self.dispatch_request()
    File "C:\Users\luvch\AppData\Local\Packages\PythonSoftwareFoundation.Python.3.9_qbz5n2kfra8p0\LocalCache\local-packages\Python39\site-packages\flask\app.py", line 1936, in dispatch_request
    return self.view_functions[rule.endpoint](**req.view_args)
    File "C:\Users\luvch\OneDrive\Desktop\New folder\hope.py", line 25, in index
    cur = mysql.connection.cursor()
    File "C:\Users\luvch\AppData\Local\Packages\PythonSoftwareFoundation.Python.3.9_qbz5n2kfra8p0\LocalCache\local-packages\Python39\site-packages\flask_mysqldb\__init__.py", line 94, in connection
    ctx.mysql_db = self.connect
    File "C:\Users\luvch\AppData\Local\Packages\PythonSoftwareFoundation.Python.3.9_qbz5n2kfra8p0\LocalCache\local-packages\Python39\site-packages\flask_mysqldb\__init__.py", line 81, in connect
    return MySQLdb.connect(**kwargs)
    File "C:\Users\luvch\AppData\Local\Packages\PythonSoftwareFoundation.Python.3.9_qbz5n2kfra8p0\LocalCache\local-packages\Python39\site-packages\MySQLdb\__init__.py", line 130, in Connect
    return Connection(*args, **kwargs)
    File "C:\Users\luvch\AppData\Local\Packages\PythonSoftwareFoundation.Python.3.9_qbz5n2kfra8p0\LocalCache\local-packages\Python39\site-packages\MySQLdb\connections.py", line 185, in __init__
    super().__init__(*args, **kwargs2)
    TypeError: connect() argument 3 must be str, not list
The debugger caught an exception in your WSGI application. You can now look at the traceback which led to the error.
To switch between the interactive traceback and the plaintext one, you can click on the "Traceback" headline. From the text traceback you can also create a paste of it. For code execution mouse-over the frame you want to debug and click on the console icon on the right side.
You can execute arbitrary Python code in the stack frames and there are some extra helpers available for introspection:
    dump() show*emphasized text*s all variables in the frame
    dump(obj) dumps all that's known about the object

在这方面的任何帮助都将不胜感激

EN

回答 1

Stack Overflow用户

发布于 2021-05-12 01:59:16

看起来像是一个简单的拼写错误,您将数据库配置详细信息加载为db = yaml.load(open('db.yaml'),但没有在app.config中引用它

代码语言:javascript
复制
app.config['MYSQL_PASSWORD'] = ['mysql_password']
app.config['MYSQL_DB'] = ['mysql_db']

它应该是:

代码语言:javascript
复制
app.config['MYSQL_PASSWORD'] = db['mysql_password']
app.config['MYSQL_DB'] = db['mysql_db']
票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/67478878

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档