TypeError during picture uploading in Postgresql via flask

Viewed 13

I am trying to upload picture to database, but it gives me this error. I did it according to Youtube tutorial Also an User on stackoverflow told me about default init method, which expects keywords ...

File "/home/user/flask-crud-api/app.py", line 56, in registration

upload = pets(filename=file.name, pic=file.read())

TypeError: __init__() got an unexpected keyword argument 'filename' 

Just in case, all the code is below

rom flask import Flask, request, render_template, url_for, redirect from flask_sqlalchemy import SQLAlchemy import os from config import Config from flask_migrate import Migrate

import psycopg2

app = Flask(__name__)
app.config.from_object(Config)



# NOT HARD CODING , export DB_URL needed

DB_URL = 'postgresql+psycopg2://postgres:mysecretpassword@127.0.0.1:5432/testdb'
app.config['SQLALCHEMY_DATABASE_URI'] =  DB_URL #os.environ.get('DATABASE_URL')
app.config['SQLALCHEMY_TRACK_MODIFICATIONS'] = False
db = SQLAlchemy(app)
migrate = Migrate(app,db) #added db




class Config(object):
    SECRET_KEY = 'some-secret-key' 
    SQLALCHEMY_DATABASE_URI = DB_URL 

class pets(db.Model):
  id = db.Column(db.Integer, primary_key=True)
  owner_name =  db.Column(db.String(100), nullable=False)
  owner_age = db.Column(db.Integer, primary_key=True)
  pet_name = db.Column(db.String(100), nullable=False)
  pet_age = db.Column(db.Integer, primary_key=False)
  pic = db.Column(db.LargeBinary) # I had this commented
# I had init func below commented, but sqlalchemy.exc.IntegrityError came up. It didn't like commit

  def __init__(self, owner_name, owner_age,pet_name,pet_age,pic):#here added pic__init__
    self.owner_name = owner_name
    self.owner_age = owner_age
    self.pet_name = pet_name
    self.pet_age = pet_age
    self.pic = pic # this too commented

  def __repr__(self):
        return '<Owner {}>'.format(self.owner_name)
db.create_all()

    

@app.route('/reg', methods=["POST","GET"])
def registration():
    if request.method == "POST":
       file = request.files["myfile"]
       upload = pets(filename=file.filename, pic=file.read())
       db.session.add(upload)
       
       o_owner_name = request.form["o_name"]
       n_owner_name = pets(owner_name=o_owner_name)
       db.session.add(n_owner_name)
# here han't added anything
       o_owner_age = request.form["o_age"]
       n_owner_age = pets(owner_age=o_owner_age)
       db.session.add(n_owner_age)

       o_pet_name = request.form["p_name"]
       n_pet_name = pets(pet_name=o_pet_name)
       db.session.add(n_pet_name)

       o_pet_age = request.form["p_age"]
       n_pet_age = pets(pet_age=o_pet_age)
       db.session.add(n_pet_age)

       db.session.commit()
       #return f'Uploaded: {file.filename}'

       return redirect("/reg")
    else:   
       return render_template('registration.html')  






@app.route('/update/<id>', methods=['PUT'])
def update_item(id):
  o_on = request.form["o_name"]
  o_oa = request.form["o_age"]
  o_pn = request.form["p_name"]
  o_pa = request.form["o_name"]

  db.session.query(pets).filter_by(id=id).update(
    dict(owner_name=o_on, owner_age=o_oa, pet_name=o_pn,pet_age=o_pa))
  db.session.commit()
  return "item updated"

@app.route('/table', methods=["GET"])
def table():
    animals = pets.query.all()
    return render_template('table.html', pets=animals) #error was loc variable pets assigned before use, then changed to animals.  
    

 
#@app.route('/pets/<id>', methods=['DELETE'])
#def delete_item(id):
  # db.session.query(pets).filter_by(id=id).delete()
   #db.session.commit()
   #return "item deleted"



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