Я пытаюсь загрузить файл в базу данных mysql, используя flask -mysqldb. В большинстве примеров в inte rnet используется flask -sqlalchemy, поэтому мне довольно сложно решить эту ошибку, так как я все еще плохо знаком с flask. Я знаю, что мне нужно объявить атрибут в этой строке [newFile = dataset (file.filename)]. Вот код:
Ошибка:
TypeError: dataset() takes 0 positional arguments but 1 was given
app.py
from flask import Flask, render_template, redirect, url_for, request, flash
from werkzeug.utils import secure_filename
from flask_mysqldb import MySQL
app = Flask(__name__)
mysql = MySQL(app)
#config MySQL
app.config['MYSQL_HOST'] = 'localhost'
app.config['MYSQL_USER'] = 'root'
app.config['MYSQL_PASSWORD'] = 'root'
app.config['MYSQL_DATABASE'] = 'myflaskapp'
app.config['MYSQL_CURSORCLASS'] = 'DictCursor'
app.config["UPLOADS"] = 'C:/Users/myproj/new/dataset'
#init MYSQL
mysql = MySQL(app)
@app.route('/')
def index():
return render_template('index.html')
@app.route('/dataset', methods = ['POST'])
def dataset():
if request.method == 'POST':
#Get dataset
file = request.files['dataset']
file.save(secure_filename(file.filename))
newFile = dataset(file.filename)
#Create cursor
cur = mysql.connection.cursor()
#execute dataset query
cur.execute("INSERT INTO dataset(dataname) VALUES(%s)", dataname)
#commit to DB
mysql.connection.commit()
#close connection
cur.close()
flash('file uploaded successfully', 'success')
return render_template('index.html', file = dataset)
if __name__ == '__main__':
app.run(debug = True)
index. html
<div class="container">
<h1>File Input</h1>
<form method="POST" action="/dataset" enctype="multipart/form-data">
<div class="form-group">
<label for="inputFile">File input</label>
<input type="file" name="dataset">
</div>
<button type="submit" class="btn btn-default">Submit</button>
</form>
</div>
I надеюсь, кто-то может помочь решить это для меня. Спасибо.