【发布时间】:2019-07-24 13:03:28
【问题描述】:
我被函数中的查询卡住了。这是我的代码:
def action(changePin, action):
pins = Pins.query.all()
changePin = int(changePin)
deviceName = Pins.query.filter_by(pin=changePin, name)
if action == "on":
GPIO.output(changePin, GPIO.HIGH)
print("turned ", deviceName , " on")
if action =="off":
GPIO.output(changePin, GPIO.LOW)
print("turned ", deviceName , " off")
for pin in pins:
db.session.commit()
这个错误是
File "<stdin>", line 4
SyntaxError: positional argument follows keyword argument
在第 4 行中,我想找到与引脚“changePin”相关的引脚名称,这是从教程改编的代码,这里是字典保存引脚信息而不是数据库的原始代码,代码:
deviceName = pins[changePin]['name']
我尝试了许多不同的方法,但都没有奏效,这里是第 4 行不同版本的列表:
deviceName = Pins.query.filter_by(changePin=pin).name
deviceName = Pins.query.filter_by(changePin, name=name)
deviceName = Pins.query.filter_by(Pins.pin=changePin, Pins.Name)
deviceName = Pins.query(Pins.pin=changePin, Pins.Name)
deviceName = Pins.query(**changePin, Pins.name)
deviceName = Pins.query(**changePin)
deviceName = db.session.filter_by(Pins.changePin)
deviceName = db.session(Pins).filter_by(pin=changePin)
和许多其他变体,我已经阅读了 sqlalchemy 文档和烧瓶文档,但我没有看到任何比较,我已经查看并尝试了这个; flask sqlalchemy query with keyword as variable 但得到了这个;
Traceback (most recent call last):
File "<stdin>", line 1, in <module>
File "<stdin>", line 4, in action
TypeError: BaseQuery object argument after ** must be a mapping, not int
这是我的 models.py 代码;
class Pins(db.Model):
id = db.Column(db.Integer, primary_key=True)
pin = db.Column(db.Integer, index=True, unique=True)
name = db.Column(db.String(64))
upDown = db.Column(db.String(4))
state = db.Column(db.String(9))
def __repr__(self):
return '<Valves {}>'.format(self.pin)
Querying with function on Flask-SQLAlchemy model gives BaseQuery object is not callable error
亲爱的门诺 谢谢你回复我,我听从了你的建议,它有效!!!
rows = Pins.query.filter_by(pin=changePin).all()
deviceName = rows[0].name
我不明白“rows[0].name”部分是如何工作的,但确实如此, 谢谢谢谢
帮助 问候 保罗
【问题讨论】:
标签: python sqlalchemy