【问题标题】:How to Change ResultProxy into a string如何将 ResultProxy 更改为字符串
【发布时间】:2015-08-30 14:02:44
【问题描述】:

当我尝试从数据库中返回特定位置的值并将值存储到文本文件时,我收到以下错误:

 Argument must be a string or a number, not 'ResultProxy'.

int(expire) 和 str(expire) 不会转换 'ResultProxy'。

 def expire():
      today = datetime.date.today()
      day = today.strftime('%d %b %y')
      conn = engine.connect()
      sql = text('select account.expire from account where account.user_name = "%s"'%('Bob'))
      expire = conn.execute(sql)
      filename = 'mysite/expiry.txt'
      read = open(filename, 'r')

      target = open(filename, 'w')
      target.truncate()
      target.write(str(expire))
      target.write("\n")
      target.close()

      read = open(filename, 'r')
      daysleft = read

 return render_template('expire.html', daysleft=daysleft)

如何将 ResultProxy 转换为字符串?

【问题讨论】:

    标签: python mysql python-2.7 flask flask-sqlalchemy


    【解决方案1】:

    执行查询总是返回一个行列表,在 SQLAlchemy 的例子中是 ResultProxy。您正在尝试将此结果对象写入文件,而不是实际结果。由于您似乎只期望一个结果,因此请确保要写入一个结果。

    results = conn.execute(sql)
    
    if results:
        expire = results[0]
        # write it to the file
    

    或者,如果您期望多个结果,则循环它们。

    results = conn.execute(sql)
    
    for expire in results:
        # write it to the file
    

    【讨论】:

      【解决方案2】:

      这是我在Flask-SQLAlchemy 中的建议。

      from flask import Flask
      from flask.ext.sqlalchemy import SQLAlchemy
      
      app = Flask(__name__)
      app.config['SQLALCHEMY_DATABASE_URI'] = 'sqlite:////tmp/test.db'
      db = SQLAlchemy(app)
      

      创建 SQLAlchemy 使用的模型。我假设您的表有 3 个字段,一个主键、一个用户名和 expires 字段,我假设这是您将此字段用作 daysleft 的整数。

      class Account(db.Model):
          __tablename__ = 'account' # Sets the actual name of the table in the db
          user_id = db.Column(db.String, primary_key=True)
          user_name = db.Column(db.String)
          expire = db.Column(db.Integer) 
      

      这是您将使用该模型的函数。

      def expire():
          today = datetime.date.today()
          day = today.strftime('%d %b %y')
          username = 'Bob'
      

      查询 Account 模型(通过 SQLAlchemy 连接到数据库),过滤 user_name 字段,并仅询问返回的第一条记录(如果有)。

          account = db.session(Account).filter_by(user_name=username).first()
          filename = 'mysite/expiry.txt'
          read = open(filename, 'r')
      
          target = open(filename, 'w')
          target.truncate()
      

      如果之前的查询没有返回任何行,account 将为 None。否则,它将是一个将每个返回字段作为属性的字典。您可以使用 account.expire 访问 expire 字段的值。

          if account != None:
              target.write(str(account.expire))
          target.write("\n")
          target.close()
      
          read = open(filename, 'r')
          daysleft = read
      
          return render_template('expire.html', daysleft=daysleft)
      

      【讨论】:

        猜你喜欢
        • 2014-12-27
        • 2010-12-21
        • 2020-11-08
        • 1970-01-01
        • 2010-12-18
        • 1970-01-01
        • 2021-10-20
        • 2012-03-04
        相关资源
        最近更新 更多