python sql语句 selcet条件为变量_在Python中将日期变量设置为SQL查询

I want to do sql query in python. I could use cx_oracle to connection database in python:

# Build connection

conn_str = u'username/password@host:1521/sid'

conn = cx_Oracle.connect(conn_str)

Now I'm trying to retrieve data from the database by using SQL query in Python:

sql_select_statement = """SELECT * FROM TABLE

WHERE DATE BETWEEN '20-oct-2017' AND '30-oct-2017'"""

Assume we don't know the starting date, we only have a date variable called starting_time, and its value is a datetime %m/%d/%Y. Also, ending_time is yesterday, I would like to modify my SQL query as:

sql_select_statement = """SELECT * FROM TABLE

WHERE DATE BETWEEN '20-oct-2017' AND sysdate-1"""

df = pd.read_sql(sql_select_statement, conn)

It works and generate a new df, but how to replace '20-oct-2017' with the variable starting_time? It's inside the sql query, and it's datetime format, so general python method like 'd%' % variable doesn't work. How to solve this problem? Thanks!

解决方案

Consider SQLAlchemy to connect pandas and use the params argument of pandas.read_sql to bind variable to SQL statement:

from sqlalchemy import create_engine

engine = create_engine("username/password@host: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})

Alternatively, continue to use the raw connection with parameterization:

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})

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值