【发布时间】:2022-08-15 08:21:18
【问题描述】:
我在数据库中有 2 个表。
class Vehicle(db.Model):
__tablename__ = \"vehicles\"
id = db.Column(db.Integer, primary_key=True, nullable=False)
num_plate = db.Column(db.String(7), nullable=False, unique=True)
type = db.Column(db.String, nullable=False)
suspicious = db.Column(db.Boolean, nullable=False, default=False)
def __repr__(self) -> str:
return f\"Vehicle(number playe={self.num_plate}, type={self.type}, suspicious={self.suspicious})\"
class Registered(db.Model):
\"\"\"
Registered User
\"\"\"
__tablename__ = \"registered\"
regid = db.Column(db.Integer, primary_key=True, nullable=False)
name = db.Column(db.String, nullable=False)
cnic = db.Column(db.String, nullable=False)
contactno = db.Column(db.String, nullable=False)
gender = db.Column(db.String, nullable=False)
dor = db.Column(db.DateTime, nullable=False)
doe = db.Column(db.DateTime, nullable=False)
vehicle_id = db.Column(
db.Integer, db.ForeignKey(\"vehicles.id\"), unique=True, nullable=False
)
现在我想更新特定人的汽车号码牌。假设有regid 3 的人。
我可以得到他的数据。
reg_visitor = (
Registered.query.filter_by(regid=3)
.join(Vehicle)
.add_columns(
Registered.name,
Registered.cnic,
Registered.contactno,
Registered.gender,
Registered.dor,
Registered.doe,
Vehicle.num_plate,
Vehicle.suspicious,
)
).first()
它是类型
<class \'sqlalchemy.engine.row.Row\'>
如果我打印它的属性,它会给出正确的答案。
print(reg_visitor.num_plate)
输出是
ANB 127
现在如果我想更新这个属性,我不能。
reg_visitor.num_plate = \"ABC1234\"
错误:
reg_visitor.num_plate = \"ABC1234\"
File \"/home/ahmad/Desktop/FYP/venv/lib/python3.7/site-packages/sqlalchemy/engine/row.py\", line 219, in __setattr__
raise AttributeError(\"can\'t set attribute\")
AttributeError: can\'t set attribute
我的 Flask-SQL Alchemy 版本是 \'2.5.1\',SQLAlchemy 版本是 1.4.29。
我不想弄乱我的版本,有没有其他方法可以根据加入更新属性?
不过,它在单张桌子上效果很好。
vehicle = Vehicle.query.filter_by(num_plate=\"ANB 127\").first()
vehicle.num_plate = \"ABC123\"
db.session.commit()
vehicle = Vehicle.query.filter_by(num_plate=\"ABC123\").first() # works well
print(vehicle)
标签: python database flask sqlalchemy flask-sqlalchemy