【问题标题】:Loop through records and update sql table if exists using Pyodbc or pandas使用 Pyodbc 或 pandas 循环遍历记录并更新 sql 表(如果存在)
【发布时间】:2017-06-22 13:01:08
【问题描述】:

我想知道 Python 是否有办法使用 pyodbc 循环遍历表的记录,如果它看到一个空白(即 ' ' )字段,请将值更改为 null。 我有一个工作 python 脚本将列出表中的值。从这里不确定如何遍历行并确定该列是否填充了空格以及是否将值更改为空。它基本上是 ssis 清理的东西,但不想经历使用 ssis 的麻烦。想用python尝试一些东西 这是代码

import pyodbc
import time
start_time = time.time()

conn = (
  r'Driver={SQL Server};'
  r'Server=<enter Server here>;'
  r'Database=<enter Database here;'
  r'Trusted_Connection=yes;'
)
cnxn = pyodbc.connect(conn)
cursor = cnxn.cursor()

# Create SQL Statement to get rows
sql = """
Select UserOrderField2 From TestAccountPD
where UserOrderField2 = ''
"""
# put all into rows variable
rows = cursor.execute(sql).fetchall()

for row in rows:
  print(row)

cursor.close
cnxn.close()
print("---%s seconds ---" % (time.time() - start_time))

【问题讨论】:

  • 使用原生 SQL。 UPDATE TestAccountPD SET UserOrderField2 = NULL WHERE UserOrderField2 = ''

标签: python sql-server pandas pyodbc


【解决方案1】:

您无需遍历行。事实上,您应该尽可能避免循环遍历行,因为它几乎总是比执行单个 UPDATE 操作慢得多。在你的情况下,就像

sql = """\
UPDATE TestAccountPD SET UserOrderField2 = NULL
WHERE LEN(LTRIM(UserOrderField2)) = 0
"""
cursor.execute(sql)
cnxn.commit()

【讨论】:

  • 谢谢,成功了。我用参数对其进行了修改,但这有效。非常感谢。
猜你喜欢
  • 2016-04-27
  • 1970-01-01
  • 1970-01-01
  • 2019-04-27
  • 2022-11-29
  • 1970-01-01
  • 1970-01-01
  • 2016-01-13
相关资源
最近更新 更多