cx®oracle python迭代

2024-06-11 04:09:13 发布

您现在位置:Python中文网/ 问答频道 /正文

我有python脚本,它逐行读取excel列并返回所有行str(值)。 我想编写另一个脚本,允许将这些值放入sqldb。我已经编写了connect方法:

def db_connect():
    adr = 'some_addr'
    uid = 'some_uid'
    pwd = 'pwd'
    port = port

    dsn_tns = cx_Oracle.makedsn(adr, port, SID)
    db = cx_Oracle.connect('username', 'pass', dsn_tns)

    cur = db.cursor()
    cur.execute('update TABLE set ROW = 666 where ANOTHER_ROW is null')
    db.commit()

此方法执行更新,但为所有行设置666。如何在sql中通过迭代来实现?例如,第一行输出==1,第二行==23,第三行==888。在


Tags: 方法脚本dbuidportconnectpwdsome
3条回答

可以使用“rownum”表达式,如:

cur.execute("update TABLE set ROW = rownum where ANOTHER_ROW is null")

这将从值1开始,每更新一行,递增一。在

如果要对要设置的值进行更多控制,还可以在PL/SQL(未测试)中执行以下操作:

^{pr2}$

这给了你最大的控制权。您可以使用任何需要的逻辑来控制新值应该是什么。在

请看另一种写入excel的方法:

adr = 'some_addr'
uid = 'some_uid'
pwd = 'pwd'
port = port

dsn_tns = cx_Oracle.makedsn(adr, port, SID)
db = cx_Oracle.connect('username', 'pass', dsn_tns)

cur = db.cursor()

cells = excel.read_from_cell()
indices_and_statuses = []
stat = execute_script(some_js)
for req_id in cells:
    indices_and_statuses.append((cells.index(req_id), stat))
    cur.execute("""update TABLE set ROW ="""+"'"+req_id+"'"+"""where ANOTHER_ROW is null""")
    db.commit()
db.close()

在这段代码中,当您将print(req_id)放入FOR语句中时,您将看到req_id正在更改。但在数据库中,只保存最后一个req_id。在

如果我正确地理解你在这里要做什么,它应该分两个阶段来完成。首先选择要更新的所有行(基于所选的条件),然后可以迭代地更新这些行中的每一行。在

它不能在单个查询中完成(或者只在一个不经过多次查询而改变的条件下进行),因为SQL是在集合上工作的,所以每次执行查询时,都会更新整个表,最后只得到最后一个查询的结果。在

相关问题 更多 >