使用pyodbc和Python更新Microsoft SQL表中的字段

3

我有一个 SQL 表格包含以下数据:

name  location
sarah   
dave     
bob     
rover
dave
bob
emma
john
prash

我有一些数据,可以给我所有这些人的位置细节。这些位置可能是:

name_data  location_data
sarah          GB 
dave           US
bob            FR
rover          IN
dave           US
bob            FR
emma           ES
john           NI

我应该如何更新数据库才能够将位置与名称相关联?我尝试了以下方法,但好像没有起作用:

cursor.execute("UPDATE "+table_name+"location) values (?)",location_data"WHERE name like" "'"name_data"'")

(?) 来看,我猜这是使用 sqlite 语法?你正在尝试构建一个非常扭曲的字符串。如果 table_name 需要是动态的,那么也许可以将其分成两部分;首先构建一个 query= 字符串,在其中使用 %s 表示不能由 (?) 表示的部分,然后执行查询字符串并在执行阶段添加占位符所覆盖的值。 - roganjosh
3个回答

7
name=input("Enter name:")

loc = input("Enter Location:")  
cursor = cnxn.cursor() 
SQLCommand = ("UPDATE {table_name} SET location_data=?  WHERE name_data ="+ name+" ")
Location = [loc]
cursor.execute(SQLCommand,Location) 

3
如果您将名称/位置数据打包到元组列表中:
for name, location in name_location_data:
    sql = "UPDATE {tbl} SET location=? WHERE name=?".format(tbl=table_name)
    cursor.execute(sql, name, location)

-1
我认为在更新表时,'(?)' 表示字符串的方法不起作用。我建议您使用 '%s' 和 SET。它应该看起来像这样:
cursor.execute("UPDATE table_name SET location='%s' WHERE name='%s'" % (location_data, name_data))

1
你实际上可以在 UPDATE 中使用 '?' - https://dev59.com/f14c5IYBdhLWcg3wapvz#28071336 - tylerl
这绝对是绝对不能做的事情!在location_dataname_data中出现未转义的值会导致你的代码受到SQL注入攻击的风险。解决方案是使用?绑定。 - undefined

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接