2017-02-11 5 views
0

私は問題があるlike in thisトピックです。そして私は「unixepoch」を試してみたが、たとえそうであっても、私のレコードはどれもSQL strftime with pythonとsqlite3は返されません。

がsqlitemanに直接以下のSQLを実行していない返す、私はリターン、私は

SELECT sum(value) 
FROM customers 
WHERE customer_id = 1 
    AND devolution = 'No' 
    AND strftime('%Y', delivery_date) IN ('2016') 

しかし、ときにあると期待値として持ちますPythonは、私がprint self.rec[0]

def get_total_from_last_year(self): 
    self.now = datetime.datetime.now() 
    self.lastYear = self.now.year -1 

    self.con = sqlite3.connect(database.name) 
    self.cur = self.con.cursor() 
    self.sql = """SELECT sum(value) 
     FROM customers 
     WHERE customer_id=? 
     AND devolution='No' 
     AND strftime('%%Y',delivery_date) IN(%s) """ %(str(self.lastYear)) 
    self.cur.execute(self.sql, str(customerID)) 
    self.rs = self.cur.fetchall() 

    for self.rec in self.rs: 
     print self.rec[0] 

からの戻りとしてNoneを取得していない誰かが私を助けることができますか? ありがとうございます。 Pythonで

答えて

1

あなたのクエリ文字列が間違っている:あなたは年のための二重の%を必要としない

  • あなたが行っているようにparamを追加したい場合は、条件 "IN"の年を引用符で囲む必要があります。
  • このようにparamsを適用することは決してありませんが、customerIdの場合と同じように、sqliteがタイプを取得できるようにしてください。

これは動作するはずです:

self.cur.execute("SELECT sum(value) \ 
    FROM customers \ 
    WHERE customer_id=? \ 
    AND devolution='No' \ 
    AND strftime('%Y',delivery_date) IN (?)", (customerID, self.lastYear)) 

をあなたが(STRする得意先を変換する必要はありません)、sqlite3のはあなたのためにそれを行うことができるはずです。

わかりやすくするために、行の最後に\を追加しています(私が行を破っているので)必要がないかもしれません。

+1

引用符で ''いいえ ''を確認してください。あなたは三重引用符を保持したいでしょう。 – Schwern

+0

完了、回答を投稿した後に気付きました。ヒントをお願いします;-) – mydaemon

+0

これでシングルクォートでcustomerIDとself.lastYearをstr()に変換しました。ありがとう! –

関連する問題