我正在处理一个 Flask + ReactJs 项目,在我的烧瓶 api 中收到此错误:属性错误:'Employee'对象没有属性'append'



这是我的flask api代码。我已经使用sqlalchemy连接了数据库,并为表查询创建了一个模型。我正在进行一个Flask+ReactJs项目,在我的Flask api中得到了以下错误:AttributeError:"Employee"对象没有属性"append"。

from flask import Flask, jsonify, request
from flask_sqlalchemy import SQLAlchemy
import json
with open('C:\Users\new\Desktop\ems\api\venv\config.json', 'r') as c:
params = json.load(c)["params"]
local_server = True
app = Flask(__name__)
app.secret_key = 'super-secret-key'
app.config['UPLOAD_FOLDER'] = params['upload_location']
if local_server:
app.config['SQLALCHEMY_DATABASE_URI'] = params['local_uri']
else:
app.config['SQLALCHEMY_DATABASE_URI'] = params['prod_uri']
db = SQLAlchemy(app)
class Employee(db.Model):
sno = db.Column(db.Integer, primary_key=True)
id = db.Column(db.Integer, nullable=False)
name = db.Column(db.String, nullable=False)
email = db.Column(db.String, nullable=False)
contact = db.Column(db.Integer, nullable=False)
designation = db.Column(db.String, nullable=False)
date = db.Column(db.String, nullable=True)

@app.route("/employee")
def employee():
employee_list = Employee.query.all()
employee = []
for employee in employee_list:
employee.append({'id' : employee.id,
'name' : employee.name,
'email' : employee.email,
'contact' : employee.contact,
'designation' : employee.designation})
return jsonify({'employee' : employee})

@app.route("/add", methods=['POST'])
def add():
employee_data = request.get_json()
new_employee = Employee(id = employee_data['id'],
name = employee_data['name'],
email = employee_data['email'],
contact = employee_data['contact'],
designation = employee_data['designation'])
db.session.add(new_employee)
db.session.commit()
return 'Added Successfully', 201

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

您有三个名称相同的对象(这不是一个好的做法,因为它会让您感到困惑,并最终引入像您刚刚遇到的错误一样的错误(:

  • 员工(1(:烧瓶路线的函数
  • employee(2(:您试图附加到的空列表
  • employee(3(:for循环中当前元素的名称

每次在同一命名空间中创建具有相同名称的新变量时,旧变量都会被覆盖。在您的情况下,函数employee()没有问题。但是两个变量employee = []for employee in employee_list:最终发生冲突,python最终删除了employee = [],现在employee指向循环中的项,该项没有append方法,因为它是类Employee中的对象。

若要解决此问题,请更改列表的名称或循环变量的名称。

@app.route("/employee")
def employee():
employee_list = Employee.query.all()
employees = [] # <--- changed from `employee` to `employees`
for employee in employee_list:
employee.append({'id' : employee.id,
'name' : employee.name,
'email' : employee.email,
'contact' : employee.contact,
'designation' : employee.designation})
return jsonify({'employee' : employee}) # <--- changed from `employee` to `employees`

相关内容