2016-10-20 15 views
0

oracleデータベースでSQLAlchemyを呼び出してFlaskでドロップダウンを設定しようとしています。 データベースのテーブルには1つの列 'VALUE'があり、その値がドロップダウンリストを構成します。 私はエラーに実行しています: とValueError:ここに欠けているものでSQLAlchemy/Flaskドロップダウンリストエラーを埋め込む

任意のアイデアを解凍するために1つの値以上が必要? I print updatef

答えて

1

私は、このエラーはSQLAlchemyのクエリ結果のあなたのミスハンドルによって引き起こされると考えられる場合

<label for="updates">Update Frequency {{ form.updates}}</label> 

engine = create_engine('oracle+cx_oracle://user:[email protected]/') 
connection = engine.connect() 
Base= declarative_base() 

GP_DD_UPDATE_FREQ = Table('GP_DD_UPDATE_FREQ', Base.metadata, 
        Column('VALUE', String(20))) 

class Dropdown(): 
    s = select([GP_DD_UPDATE_FREQ.c.VALUE]) 
    result = connection.execute(s) 
    ape = [row for row in result ] 

updatef = Updatefreq.ape 

class ReusableForm(Form): 
    updates = SelectField('Update:', coerce=int, choices = updatef) 

@app.route("/editor", methods=['GET', 'POST']) 
def hello(): 
    form = ReusableForm(request.form) # calls on form 

    if request.method == 'POST': 
     updates = request.form['updates'] 

hello.htmlまた、値のリストがうまく読み込まれます。クラスでDropdown

class Dropdown(): 
    s = select([GP_DD_UPDATE_FREQ.c.VALUE]) 
    result = connection.execute(s) 
    ape = [row for row in result ] 

result SQLAlchemyのクエリの実行です。そしてそれはResultProxyオブジェクトです。このResultProxyオブジェクトは反復可能であり、反復するときの各要素はタプルです。 SELECTクエリがテーブルの1つの列のみをフェッチする場合でも、返される各行はscalarの代わりにtupleと表されます。

VALUE 
------- 
1 
2 
3 

クエリの返された結果は以下のように表される:

(1,) 
(2,) 
(3,) 

あなたはResultProxyクラスは多くを提供していることに気づくかもしれ

たとえば、あなたのテーブルの列VALUEは次のようであると仮定

fetchall(), return [(1,), (2,), (3,)], a list of tuple 
fetchone(), return (1,), a tuple (first time call) 
fetchmany(2), return [(1,), (2,)], a list of tuple 
first(), return (1,), a tuple 
scalar(), return 1, a scalar 

あなたのアプリケーションでは、あなたの代わりに

ape = [row for row in result] 

の、スカラーのリストが欲しいあなたは

ape = [row[0] for row in result] 

それとも

ape = [first_of_row for first_of_row, in result] 

を使用する必要があり、この図は答えることができる願っています。 ありがとう!

+0

これは間違いなく以前のタプルを表示できたので、これは間違いなく正しい行に沿っています。私はあなたの最後の2つの提案を試して、エラーを取得しようとしています: ValueError:アンパックする値が多すぎます – Infinity8

+0

'updatef = Updatefreq.ape'の値は何ですか? – rojeeer

+0

はい、それは ['連続'、 '毎日'、 '週2回'、 '月間'、 '四半期'、 '年2回'、 '毎年'、 'asNeeded'、 '不規則'、 'notPlanned '、' unknown '] – Infinity8

関連する問題