2016-06-28 14 views
1

py3bcとフラスコを使用してTeradataにクエリを行い、d3を使用してデータをグラフ化します。pyodbc結果セットにデータ型が埋め込まれています

結果セットには2つの列があり、1つは小数点、もう1つは整数です。私は私のhtmlページに結果を渡し、出力をログに記録するとき、私はこれらの線に沿って何かを取得しています:

[(Decimal(& #39;-16.200000000& #39;), 5), (Decimal(& #39;-23.100000000& #39;), 12), (Decimal(& #39;500.300000000& #39;), 5)]. 

組み込みデータ型情報は、それが困難な結果セットで何かをすることです。代わりに、代わりにこのように出力を得ることができますか?

[[-16.200000000, 5], [-23.100000000, 12], [500.300000000, 5]] 

つまり、配列の配列が必要です。私は、次の午前

ステップ:

  1. を接続
  2. を作成し、変数
  3. 内の行を格納するためのSQL
  4. 使用fetchall()が私に変数を渡す実行カーソル
  5. を作成htmlページを使用してrender_template
  6. のjavascriptセットの変数と同じデータ

    var data={{dataset}}; 
    console.log(data); 
    

に渡された私は、彼らが結果セットを取るとhtml内の行を印刷し、それを反復処理し、多くのフラスコの例を見てきましたが、私は私のD3コードへの入力として結果のデータセットを使用したいです。なぜデータ型を表示していますか?なぜ整数列のデータ型も表示されないのでしょうか?

私は問題が行構造に関係していると推測していますが、代わりにリストを作成しようとしましたが、データ型情報を取り除くことができません。私はその後、アンパサンドのためにあらゆる種類のエラーを取得します。

答えて

0

私はthis答えで提供される、それはあなたが簡単にすることなく、JSを使用してクライアント側からそれを取り出すことができるようにjsonオブジェクトにクエリのデータをdumpsすることが最善であるとより良いアプローチは、だと思います正規表現やその他の仕組みを使って解析する。

手順:

1 - サブクラスjson.JSONEncoder

class DecimalEncoder(json.JSONEncoder): 
    def default(self, o): 
     if isinstance(o, decimal.Decimal): 
      return float(o) #Type conversion happens here 
     return super(DecimalEncoder, self).default(o) 

2 - json対象としてテンプレートへのparamsを渡し:

data = json.dumps({'pi': decimal.Decimal('3.14')}, cls=DecimalEncoder) 
return render_template('mytemplate.html', dataset=data) 

3 - バック読みますあなたのJSでのクエリの結果:

var data = {{dataset}}; 
+0

これは機能しました!以前は成功せずに結果をjsonに変換しようとしました。どうもありがとうございます! – dobbysock1002

+0

@ dobbysock87 ..私は助けてくれてうれしい..;) –

0
import re 
processed = [] 
for piece in results: 
    processed.append([re.sub(".*?(-?\d+\.\d+).*", "\1", repr(piece[0])), piece[1]] 

これらの行に何かがあります。それはタイプがDecimal(teradataの種類)なので、そのデータを表示しています。私はrepr()あなたがログに表示されている同じ結果を与えるだろうと思っています...あなたが望むものに正規表現してください。

関連する問題