简体   繁体   中英

__init__() takes 1 positional argument but 3 were given

I am trying to send a post request to the created table but keep getting the error init () takes 1 positional argument but 3 were given.

from flask import Flask, request, jsonify
from flask_sqlalchemy import SQLAlchemy
import os

app = Flask(__name__)
file_path = os.path.abspath(os.getcwd())+"\database.db"

app.config['SQLALCHEMY_DATABASE_URI'] = 'sqlite:///'+file_path
app.config['SQLALCHEMY_TRACK_MODIFICATIONS'] = False

db = SQLAlchemy(app)

class post(db.Model):
    id = db.Column(db.Integer, primary_key=True)
    status = db.Column(db.Boolean(50))
    title = db.Column(db.String(200))
    body = db.Column(db.String(max))
    createdtime = db.Column(db.DateTime())

def __init__(self, status, title, body, createdtime):
    self.status = status
    self.title= title
    self.body = body
    self.createdtime = createdtime


@app.route('/api/posts', methods=['GET'])
def get_all_posts():
    return ''

@app.route('/api/posts/<id>', methods=['GET'])
def get_one_post():
    return ''

@app.route('/api/new-post', methods=['POST'])
def put_post():
    title= request.get_json('title')
    body= request.get_json('body')

    new_post= post(title, body)
    db.session.add(new_post)
    db.session.commit()
    return jsonify({'message': 'Post created Successfully'})


@app.route('/api/delete-post', methods=['DELETE'])
def delete_post():
    return ''

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

What am i doing wrong?

plus my request looks something like this

{
 "title" : "Start before you are ready",
 "body": "This post will be a little different from what I'm used to 
 write. I tend to keep my articles in the technical realm of programming. 
 This time, I'll have to talk about a subject that transformed my mindset 
 lately. It will appear a little like a rant, and it very well may be :D"
}

First the __init__ method is not the the same indentation level as the post class. Secondly you don't need to override the default constructor of db.Model you can use the Post model.

For example: post = Post(title='xx') like this you can pass as many argument to it like this when you instantiate the Post class as long as the attribute you are using is in the class.

The technical post webpages of this site follow the CC BY-SA 4.0 protocol. If you need to reprint, please indicate the site URL or the original address.Any question please contact:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM