Как сделать ссылку в запросе SQL на фреймы с датой?

Как правильно указать промежуток дат?

Пробую так:

pr = df456['Дата'].max().strftime('%Y-%m-%d')

tdate = datetime.datetime.today().strftime('%Y-%m-%d')


sql = f'''select so."Дата",
                 so."Вес",
                 so."№ дела"                
                                               
        from datamart.PIECE_PROD so
           
             
        where so."Вес" = 'увеличился'
        
        and so."№ дела" = 'доступно'
        and so."Дата" between 'pr' AND 'tdate'
            
   '''
osn_data = pd.DataFrame(mycur.execute(sql).fetchall(), columns=['Дата',
                                                                'Вес',                                                                
                                                                '№ дела'
                                                               ])
                                                        
                                                       
osn_data

Но получаю ошибку:

DatabaseError: ORA-01858: a non-numeric character was found where a numeric was expected


Ответы (2 шт):

Автор решения: MaxU

Лучше воспользуйтесь методом pd.read_sql() и параметризированным запросом:

import pandas as pd
import cx_Oracle
from cx_Oracle import makedsn
from sqlalchemy import types, create_engine

usr = "test"
pwd = "my_oracle_password"
dsn = makedsn("ora_scan_or_hostname", 1521, service_name="my_service_name")

engine = create_engine(f'oracle+cx_oracle://{usr}:{pwd}@{dsn}')

qry = f'''select so."Дата",
                 so."Вес",
                 so."№ дела"                                                              
        from datamart.PIECE_PROD so             
        where so."Вес" = 'увеличился'     
        and so."№ дела" = 'доступно'
        and so."Дата" between :d1 AND :d2 '''

d1 = df456['Дата'].max()
d2 = pd.to_datetime("now")

params = (d1, d2)

df = pd.read_sql(qry, engine, params=params)
→ Ссылка
Автор решения: Денис

Благодарю всех за помощь, дело было в недостаче кавычек и функции TO_TIMESTAMP

sql = f'''select so."Дата",
                 so."Вес",
                 so."№ дела"                
                                           
        from datamart.PIECE_PROD so
       
         
        where so."Вес" = 'увеличился'
    
        and so."№ дела" = 'доступно'
        and so."Дата" between TO_TIMESTAMP(''' +"'" +pr+ "','DD.MM.YYYY HH24:mi:ss') 
and TO_TIMESTAMP('"+ tdate+"','DD.MM.YYYY HH24:mi:ss')"
        

osn_data = pd.DataFrame(mycur.execute(sql).fetchall(), columns=['Дата',
                                                                'Вес',                                                                
                                                                '№ дела'
                                                               ])
                                                    
                                                   
→ Ссылка