【问题标题】:TypeError: __init__() takes 1 positional argument but 5 were givenTypeError: __init__() 接受 1 个位置参数,但给出了 5 个
【发布时间】:2018-06-21 20:10:21
【问题描述】:
    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:///students.sqlite3'
    app.config['SECRET_KEY'] = "random string"

    db = SQLAlchemy(app)

    class students(db.Model):
       id = db.Column('student_id', db.Integer, primary_key = True)
       name = db.Column(db.String(100))
       city = db.Column(db.String(50))
       addr = db.Column(db.String(200))
       pin = db.Column(db.String(10))

    def __init__( self, name, city, addr, pin):
       self.name = name
       self.city = city
       self.addr = addr
       self.pin = pin

    def __str__(self):
       return "{} {} {} {}".format(self.name,self.city,self.addr,self.pin)

    @app.route('/')
    def show_all():
       return render_template('show_all.html', students = students.query.all() )

    @app.route('/new', methods = ['GET', 'POST'])
def new():
   if request.method == 'POST':
      if not request.form['name'] or not request.form['city'] or not request.form['addr']:
         flash('Please enter all the fields', 'error')
      else:
         student = students(request.form['name'], request.form['city'],
            request.form['addr'], request.form['pin'])

         db.session.add(student)
         db.session.commit()
         flash('Record was successfully added')
         return redirect(url_for('show_all'))
   return render_template('new.html')

if __name__ == '__main__':
   db.create_all()
   app.run(debug = True)

**这是使用烧瓶创建数据库的简单代码,但在输入时出现错误..

我得到一个错误 builtins.TypeError TypeError: __init__() 接受 1 个位置参数,但给出了 5 个

【问题讨论】:

标签: sqlite flask-sqlalchemy python-3.5


【解决方案1】:

请修正缩进,或者你真的在class students之外定义了__init__

应该是这样的

class students(db.Model):
    # class variables

    # indent for members
    def __init__(self, name, city, addr, pin):
        # some code

否则,不会为该类提供 __init__ 方法,然后该类具有默认的 __init__(self) 构造函数,仅采用 1 个位置参数

【讨论】:

  • 这段代码取自tutorialspoint.com/flask/flask_sqlalchemy.htm,它也缺少正确的缩进。
  • 啊那些令人发指的 Python 缩进。为什么他们不能使用 C/C++ 中的经典大括号 {}。因为他们想要“与众不同”。
猜你喜欢
  • 1970-01-01
  • 2015-07-13
  • 2017-04-22
  • 2014-11-12
  • 1970-01-01
  • 2019-10-27
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多