2017-10-31 31 views
0

PythonでSQLクエリを実行したいと思います。私はpythonで接続データベースにcx_oracleを使用することができます。Pythonで日付変数をSQLクエリに設定する

# Build connection 
conn_str = u'username/[email protected]:1521/sid' 
conn = cx_Oracle.connect(conn_str) 

は今、私はPythonでSQLクエリを使用して、データベースからデータを取得しようとしている:

sql_select_statement = """SELECT * FROM TABLE 
WHERE DATE BETWEEN '20-oct-2017' AND '30-oct-2017'""" 

たちは、開始を知らないと仮定しますdateにはstart_timeという日付変数のみがあり、その値はdatetime%m /%d /%Yです。それが動作し、新しいDFを生成するが、どのように変数starting_timeで'20 - オクト2017' を置き換えるために

sql_select_statement = """SELECT * FROM TABLE 
WHERE DATE BETWEEN '20-oct-2017' AND sysdate-1""" 

df = pd.read_sql(sql_select_statement, conn) 

:としても、ending_timeは昨日ですが、私は私のSQLクエリを変更したいと思いますか?これはsqlクエリの中にあり、datetime形式なので、 'd%'%variableのような一般的なpythonメソッドは機能しません。この問題を解決するには?ありがとう!

+0

何文字列の書式設定について"sta"と "sysdate-1" "" "format(st = starting_time)' – kstullich

+0

emmm..itは 'ORA-00905:missing keyword'と書いてあります。変更する。わからない –

+0

@kstullich ...書式設定された文字列の引用符を忘れてしまった。しかし、補間しないでください。パラメータ化を使用します。 – Parfait

答えて

0

パンダを接続し、SQLステートメントに変数をバインドするpandas.read_sqlのparams引数を使用するSQLAlchemyを考えてみましょう:

また
from sqlalchemy import create_engine 

engine = create_engine("username/[email protected]:1521/sid") 

sql_select_statement = "SELECT * FROM TABLE WHERE DATE BETWEEN :my_date AND sysdate-1" 

my_var = '20-oct-2017' 
df = pd.read_sql(sql_select_statement, engine, params={'my_date':my_var}) 

、パラメータとの生の接続を継続して使用する:

sql_select_statement = "SELECT * FROM TABLE WHERE DATE BETWEEN :my_date AND sysdate-1" 

my_var = '20-oct-2017' 
df = pd.read_sql(sql_select_statement, conn, params={'my_date':my_var}) 
関連する問題