【问题标题】:How to pass updates into pd.read_sql? Update如何将更新传递到 pd.read_sql?更新
【发布时间】:2021-04-06 02:55:46
【问题描述】:

我有这个查询,我每周都会使用pd.read_sql 创建报告。我希望能够更新 store 的 case 语句,更新 Date Add,并在语句末尾存储 IN,而无需手动更改商店编号和日期。有什么方法可以编辑查询以进行更新?

这是查询

dataframe = pd.read_sql("""
            SELECT Top(10)
    CAST( Store as VARCHAR)  + 'þ' as Store,
    CONVERT( VARCHAR, Tran_Dt2, 101 ) + 'þ' as Tran_Dt,
    CONVERT(char(5), Start_Time, 108) + 'þ' as Start_Time, 
    [Count] 
 FROM
 (
  SELECT 
    CASE 
    WHEN [Store] = 313 THEN 3174
    WHEN [Store] = 126 THEN 3191
    END AS Store
      , DATEADD (YEAR, +2, DATEADD(DAY, +4, Tran_Dt2)) as Tran_Dt2
      ,[Start_Time]
      ,[Count]
      ,Store as Sister_Store
 FROM 
(
SELECT 
Store,
CONVERT(datetime, Tran_Dt) as Tran_Dt2,
Start_Time,
Count
FROM [VolumeDrivers].[dbo].[SALES_DRIVERS_ITC_Signup_65wks]
WHERE CONVERT(datetime, Tran_Dt)  between CONVERT(datetime,'2/8/2019') and CONVERT(datetime,'3/15/2019')
AND 
Store IN (313, 126) 
--Single Store: Store = Store #
) AS A
) AS B
ORDER BY Tran_Dt2, Store
            """, con = conn) 

我希望能够做一些事情,比如声明一个变量并让它填充到代码中,比如:

oldstore1 = 313
newstore1 = 3174
oldstore2 = 126
newstore2 = 3191

daframe = pd.ready_sql("""...  
...
   SELECT 
    CASE 
    WHEN [Store] = oldstore1 THEN newstore1
    WHEN [Store] = oldstore2 THEN newstore2
...

更新----

我目前处于这一点,并且查询一直在工作,直到我的内核重新启动并且我丢失了我的代码。关于为什么它不再工作的任何提示?

#Declare variables for queries
old_store1 = 313
new_store1 = 3157
old_store2 = 126
new_store2 = 3196
datefrom = '2/8/2019'
dateto = '3/15/2019'
yearadd = '+2'
dayadd = '+4'

ITC = pd.read_sql("""SELECT 

    CAST( Store as VARCHAR)  + 'þ' as Store,
    CONVERT( VARCHAR, Tran_Dt2, 101 ) + 'þ' as Tran_Dt,
    CONVERT(char(5), Start_Time, 108) + 'þ' as Start_Time, 
    [Count] 

 
 FROM


 (

  SELECT 

    CASE 
    WHEN [Store] = {old_store1} THEN {new_store1}
    WHEN [Store] = {old_store2} THEN {new_store2}

 

    END AS Store

      , DATEADD (YEAR, {yearadd}, DATEADD(DAY, {dayadd}, Tran_Dt2)) as Tran_Dt2
      ,[Start_Time]
      ,[Count]
      ,Store as Sister_Store


 FROM 

(
SELECT 
Store,
CONVERT(datetime, Tran_Dt) as Tran_Dt2,
Start_Time,
Count

FROM [VolumeDrivers].[dbo].[SALES_DRIVERS_ITC_Signup_65wks]

 
WHERE CONVERT(datetime, Tran_Dt)  between CONVERT(datetime,{datefrom}) and CONVERT(datetime,{dateto})

AND 

Store IN ({old_store1}, {old_store2}) 
--Single Store: Store = Store #


) AS A

) AS B

ORDER BY Tran_Dt2, Store
""", con = conn)

【问题讨论】:

标签: python python-3.x anaconda


【解决方案1】:

能够弄清楚为什么它不起作用。我猜 python 3 及更高版本有一个内置函数,允许您将“f”放在查询前面,并让您传递您创建的变量。我知道这不是执行脚本的最安全方式,但我会考虑在未来创建一个 for 循环,以使其更安全。感谢大家的帮助!

#Declare variables for queries
old_store1 = 313
new_store1 = 3157
old_store2 = 126
new_store2 = 3196
datefrom = '2/15/2019'
dateto = '3/22/2019'
yearadd = '+2'
dayadd = '+4'

ITC = pd.read_sql(f"""SELECT 

    CAST( Store as VARCHAR)  + 'þ' as Store,
    CONVERT( VARCHAR, Tran_Dt2, 101 ) + 'þ' as Tran_Dt,
    CONVERT(char(5), Start_Time, 108) + 'þ' as Start_Time, 
    [Count]  
 FROM
 (
  SELECT 
    CASE 
    WHEN [Store] = {old_store1} THEN {new_store1}
    WHEN [Store] = {old_store2} THEN {new_store2}
    .....
#run code and verify it works
Sales_Drivers_ITCSignup = pd.read_sql(ITCQuery, con = conn, index_col='Store')
Sales_Drivers_ITCSignup.head()

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2021-08-11
    • 1970-01-01
    • 2021-04-20
    • 2023-01-18
    • 1970-01-01
    • 2017-12-13
    • 1970-01-01
    相关资源
    最近更新 更多