On my first flask app this error comes "TypeError: books() takes 0 positional arguments but 11 were given" I have tried a lot but unable to solve this
Question:
from flask import Flask, request, flash, url_for, redirect, render_template
from flask_sqlalchemy import SQLAlchemy
app=Flask(__name__)
app.config['SQLALCHEMY_DATABASE_URI'] = "sqlite:///database.db"
app.config['SQLALCHEMY_TRACK_MODIFICATIONS'] = False
app.config['SECRET_KEY'] = "random string"
db = SQLAlchemy(app)
class books(db.Model):
bookID = db.Column(db.Integer(), primary_key=True)
title = db.Column(db.String())
authors = db.Column(db.String())
average_rating = db.Column(db.Float())
isbn = db.Column(db.Integer())
isbn13 = db.Column(db.Integer())
language_code = db.Column(db.String(length=10))
num_pages = db.Column(db.Integer())
ratings_count = db.Column(db.Integer())
text_reviews_count = db.Column(db.Integer())
publication_date = db.Column(db.Date())
publisher = db.Column(db.String())
@app.route("/")
@staticmethod
def home_page():
return render_template('home.html')
@app.route("/books")
def books():
return render_template('books.html')
@app.route("/members")
def members():
return render_template('members.html')
@app.route('/add', methods = ['GET', 'POST'])
def add():
if request.method == 'POST':
if not request.form['title'] or not request.form['authors'] or not
request.form['average_rating']or not request.form['isbn']or not request.form['isbn13']or
not request.form['language_code']or not request.form['num_pages']or not
request.form['ratings_count']or not request.form['text_reviews_count']or not
request.form['average_rating']or not request.form['publication_date']or not
request.form['publisher']:
flash('Please enter all the fields', 'error')
else:
adds = books(request.form['title'], request.form['authors'],
request.form['average_rating'], request.form['isbn'],
request.form['isbn13'],request.form['language_code'],
request.form['num_pages'],request.form['ratings_count'],
request.form['text_reviews_count'],request.form['publication_date'],
request.form['publisher'])
db.session.add(adds)
db.session.commit()
flash('Record was successfully added')
return render_template('addbooks.html')
if __name__ == "__main__":
app.run(debug=1)
this is my app.py file, the database database.db is created without error only issue I am facing is in inserting data in the database
tried a lot of stuff but this error remains the same
What exactly does it signify and what can I do about it?
Thanks in advance
Answers:
Try keyword arguments when trying to add a new entry to the database not positional ones:
adds = books(title=request.form['title'], authors=request.form['authors'],
average_rating=request.form['average_rating'], isbn=request.form['isbn'],
isbn13=request.form['isbn13'], language_code=request.form['language_code'],
num_pages=request.form['num_pages'], ratings_count=request.form['ratings_count'],
text_reviews_count=request.form['text_reviews_count'], publication_date=request.form['publication_date'],
publisher=request.form['publisher'])
PS. please double check my code before you paste it into your’s because there are a lot of entries and I might have missed one!
from flask import Flask, request, flash, url_for, redirect, render_template
from flask_sqlalchemy import SQLAlchemy
app=Flask(__name__)
app.config['SQLALCHEMY_DATABASE_URI'] = "sqlite:///database.db"
app.config['SQLALCHEMY_TRACK_MODIFICATIONS'] = False
app.config['SECRET_KEY'] = "random string"
db = SQLAlchemy(app)
class books(db.Model):
bookID = db.Column(db.Integer(), primary_key=True)
title = db.Column(db.String())
authors = db.Column(db.String())
average_rating = db.Column(db.Float())
isbn = db.Column(db.Integer())
isbn13 = db.Column(db.Integer())
language_code = db.Column(db.String(length=10))
num_pages = db.Column(db.Integer())
ratings_count = db.Column(db.Integer())
text_reviews_count = db.Column(db.Integer())
publication_date = db.Column(db.Date())
publisher = db.Column(db.String())
@app.route("/")
@staticmethod
def home_page():
return render_template('home.html')
@app.route("/books")
def books():
return render_template('books.html')
@app.route("/members")
def members():
return render_template('members.html')
@app.route('/add', methods = ['GET', 'POST'])
def add():
if request.method == 'POST':
if not request.form['title'] or not request.form['authors'] or not
request.form['average_rating']or not request.form['isbn']or not request.form['isbn13']or
not request.form['language_code']or not request.form['num_pages']or not
request.form['ratings_count']or not request.form['text_reviews_count']or not
request.form['average_rating']or not request.form['publication_date']or not
request.form['publisher']:
flash('Please enter all the fields', 'error')
else:
adds = books(request.form['title'], request.form['authors'],
request.form['average_rating'], request.form['isbn'],
request.form['isbn13'],request.form['language_code'],
request.form['num_pages'],request.form['ratings_count'],
request.form['text_reviews_count'],request.form['publication_date'],
request.form['publisher'])
db.session.add(adds)
db.session.commit()
flash('Record was successfully added')
return render_template('addbooks.html')
if __name__ == "__main__":
app.run(debug=1)
this is my app.py file, the database database.db is created without error only issue I am facing is in inserting data in the database
tried a lot of stuff but this error remains the same
What exactly does it signify and what can I do about it?
Thanks in advance
Try keyword arguments when trying to add a new entry to the database not positional ones:
adds = books(title=request.form['title'], authors=request.form['authors'],
average_rating=request.form['average_rating'], isbn=request.form['isbn'],
isbn13=request.form['isbn13'], language_code=request.form['language_code'],
num_pages=request.form['num_pages'], ratings_count=request.form['ratings_count'],
text_reviews_count=request.form['text_reviews_count'], publication_date=request.form['publication_date'],
publisher=request.form['publisher'])
PS. please double check my code before you paste it into your’s because there are a lot of entries and I might have missed one!