I've read over 20 different questions with the same problem - and the suggested answers didn't solve my problem. I'm still getting sqlalchemy psycopg2.errors.InsufficientPrivilege: permission denied for relation <<table>>
Environment: EC2, debian 8, postgresql, flask, sqlalchemymy table in postgresql:
Create table Members(id BIGSERIAL PRIMARY KEY,joinDate TIMESTAMPTZ DEFAULT Now(),password TEXT NOT NULL);
directly in postgresql: INSERT INTO members (password) VALUES('123') RETURNING id;
works perfect
I've granted my user all possible grants
grant all privileges on database <my_db> to <my_user>grant all privileges on all table in schema public to <my_user>grant all privileges on all relations in schema public to <my_user>
I've also created a .htaccess
file under var/www/html
with Header set Access-Control-Allow-Origin "*"
my table mapped with sqlalchemy member.py
from datetime import datetimefrom sqlalchemy import create_engine, Column, String, Integer, DateTimefrom sqlalchemy.ext.declarative import declarative_basefrom sqlalchemy.orm import sessionmakerfrom marshmallow import Schema, fieldsfrom sqlalchemy.schema import UniqueConstraintimport sqlalchemy as saEngine = create_engine('postgresql://<my_user>:<my_psw>@<my_db_url>/<my_dn_name>')Session = sessionmaker(bind=Engine)Base = declarative_base()class MemberSchema(Schema): id = fields.Number() password = fields.Str()class Member(Base): __tablename__ = 'members' id = Column(Integer, primary_key=True) password = Column(String) def __init__(self, password): self.password = password
the code receiving the POST and doing the insert in test.py
:
from flask import Flask, render_template, request,jsonifyfrom flask_cors import CORS, cross_originimport loggingdef register_member(password): session = Session() newMember = Member(password) session.add(newMember) session.commit() return newMemberapp = Flask(__name__)cors = CORS(app)app.config['CORS_HEADERS'] = 'Content-Type'@app.route("/register", methods=["GET", "POST"])@cross_origin() def register(): try: formData = request.form register_member(formData['password']) return jsonify({"message":"Regsitrated successfully!"}) except Exception as ex: logging.debug(ex)if __name__ == "__main__": app.run(host='0.0.0.0', port=1234, debug=True)
executing this code results in exception with these errors
DEBUG:root:(psycopg2.errors.InsufficientPrivilege) permission denied for relation members[SQL: INSERT INTO members (password) VALUES (%(password)s) RETURNING members.id][parameters: {'password': '4444'}]
and
TypeError: The view function did not return a valid response. The function either returned None or ended without a return statement.
Any help would be appreciated