【问题标题】:Running a SQLAlchemy query with filter in PythonAnywhere在 PythonAnywhere 中使用过滤器运行 SQLAlchemy 查询
【发布时间】:2021-10-18 20:45:20
【问题描述】:

我正在尝试在我的 Flask Web 应用程序(托管在 PythonAnywhere)上运行 SQLAlchemy 查询,但我被困住了 - 我是 SQLAlchemy 的新手,并试图四处寻找答案并尝试了一些不同的解决方案,但是没有任何效果。

这是初始设置:

from flask import Flask, redirect, render_template, request, url_for 从 flask_sqlalchemy 导入 SQLAlchemy from flask_login import login_required, login_user, LoginManager, logout_user, UserMixin, current_user 从 werkzeug.security 导入 check_password_hash,generate_password_hash 导入请求 导入 urllib.parse

app = Flask(__name__)
app.config["DEBUG"] = True

SQLALCHEMY_DATABASE_URI = "mysql+mysqlconnector://{username}:{password}@{hostname}/{databasename}".format(
    username="****",
    password="****",
    hostname="****",
    databasename="****",
)


app.config["SQLALCHEMY_DATABASE_URI"] = SQLALCHEMY_DATABASE_URI
app.config["SQLALCHEMY_POOL_RECYCLE"] = 299
app.config["SQLALCHEMY_TRACK_MODIFICATIONS"] = False
db = SQLAlchemy(app)

app.secret_key = "58f5x^G!S8q8p6MZDRHa"
login_manager = LoginManager()
login_manager.init_app(app)

[...]

class Portfolio(db.Model):

    __tablename__ = "portfolio"

    id = db.Column(db.Integer, primary_key=True, autoincrement=True)
    symbol = db.Column(db.String(32))
    quantity = db.Column(db.Integer)
    user = db.Column(db.String(32))

我正在尝试运行查询 - 第一部分有效,在第二部分中我尝试通过表格中给出的符号过滤表格(我将其设为“NFLX”只是为了查看查询本身是否会工作)检查该条目是否已经存在 - 目的是根据 curr_portfolio 是否为无/空来具有不同的行为。

    # add transaction to Transaction database
    transaction = Transaction(symbol=request.form["symbol"], quantity=request.form["shares"], totalvalue=cost, user="admin")
    db.session.merge(transaction)
    db.session.commit()

    # add transaction to Portfolio database
    symbol=(request.form.get("symbol")
    curr_portfolio = session.query(Portfolio.symbol).filter(symbol="NFLX").all()

    return redirect(url_for('dashboard'))

任何指针都非常感谢!

【问题讨论】:

  • 乍一看,我相信你应该使用symbol == 'NLFX'而不是单个等号。
  • 谢谢,我都试过了,因为不确定这是否是问题,但不幸的是都不起作用
  • 实际问题是什么?你有错误吗?还是不是您想要的结果?
  • 啊,我看到了另一件奇怪的事情:您没有将 SQLAlchemy 字段与值进行比较,而是将表单中的输入值与字符串“NLFX”进行比较。也尝试将过滤器更改为.filter(Portfolio.symbol == symbol)
  • @noslenkwah 我在展示的示例中遇到语法错误,使用其他解决方案我根本没有得到任何结果(即使我知道查询应该是一行)

标签: python flask sqlalchemy flask-sqlalchemy pythonanywhere


【解决方案1】:

使用db.session.query(Portfolio.symbol).filter(Portfolio.symbol == symbol).all()

Portfolio.query.filter(Portfolio.symbol == symbol).all()

【讨论】:

    【解决方案2】:

    用途:

    curr_portfolio = session.query(Portfolio.symbol).filter_by(symbol="NFLX").all()
    

    curr_portfolio = session.query(Portfolio.symbol).filter(Portfolio.symbol=="NFLX").all()
    

    【讨论】:

      猜你喜欢
      • 2015-01-15
      • 1970-01-01
      • 1970-01-01
      • 2021-08-10
      • 2018-08-09
      • 2016-06-09
      • 1970-01-01
      • 2020-11-04
      • 2022-07-26
      相关资源
      最近更新 更多