繁体   English   中英

使用 cursor.execute 将值插入表中

[英]INSERT values into table using cursor.execute

我正在编写一些代码,这些代码将从 API 中提取数据并将记录插入到我的表中。

我不确定如何格式化我的插入语句。 我想在表中没有现有匹配项的地方插入值(基于日期),并且我不想在列的对手 = 我的学校团队的地方插入值。

import datetime
import requests
import cx_Oracle
import os
from pytz import timezone

currentYear = 2020

con = Some_datawarehouse
cursor = con.cursor()

json_obj = requests.get('https://api.collegefootballdata.com/games?year='+str(currentYear)+'&seasonType=regular&team=myteam')\
    .json()

for item in json_obj:
    EVENTDATE = datetime.datetime.strptime(item['start_date'], '%Y-%m-%dT%H:%M:%S.%fZ').date()
    EVENTTIME = str(datetime.datetime.strptime(item['start_date'], '%Y-%m-%dT%H:%M:%S.%fZ').replace(tzinfo=timezone('EST')).time())
    FINAL_SCORE = item.get("home_points", None)
    OPPONENT = item.get("away_team", None)
    OPPONENT_FINAL_SCORE = item.get("away_points", None)
    cursor.execute('''INSERT INTO mytable(EVENTDATE,EVENTTIME,FINAL_SCORE,OPPONENT,OPPONENT_FINAL_SCORE) VALUES (:1,:2,:3,:4,:5)
                        WHERE OPPONENT <> 'my team'
                        AND EVENTDATE NOT EXISTS (SELECT EVENTDATE FROM mytable);''',
                   [EVENTDATE,EVENTTIME,FINAL_SCORE,OPPONENT,OPPONENT_FINAL_SCORE])
con.commit()
con.close

This may be more of an ORACLE SQL rather than python question, but I'm not sure if cursor.execute can accept MERGE statements. 我也认识到 WHERE 语句在这里不起作用,但这更像是我想要完成的一个想法。

将 sql 查询更改为:

INSERT INTO mytable(EVENTDATE,EVENTTIME,FINAL_SCORE,OPPONENT,OPPONENT_FINAL_SCORE) 
SELECT * FROM (VALUES (:1,:2,:3,:4,:5)) vt(EVENTDATE,EVENTTIME,FINAL_SCORE,OPPONENT,OPPONENT_FINAL_SCORE)
WHERE vt.OPPONENT <> 'my team'
AND vt.EVENTDATE NOT IN (SELECT EVENTDATE FROM mytable);

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM