Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/python/278.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/7/sql-server/24.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
在SQL Server中使用Python更新表中列的值_Python_Sql Server_Python 3.x_Pandas_Python 2.7 - Fatal编程技术网

在SQL Server中使用Python更新表中列的值

在SQL Server中使用Python更新表中列的值,python,sql-server,python-3.x,pandas,python-2.7,Python,Sql Server,Python 3.x,Pandas,Python 2.7,我想用python中的SQL server查询更新一列,正如您看到的,我正在更新相对列,如下所示: 我有一个CSV文件,其中包含一些相对表的值,如下所示: CSV文件:(a.CSV) Python代码:(创建名称值) python代码的结果: ART0015-A ADC00112-A 表: A Name FamilyName ART-B-C-ART0015-D-E01 NULL

我想用python中的SQL server查询更新一列,正如您看到的,我正在更新相对列,如下所示: 我有一个CSV文件,其中包含一些相对表的值,如下所示:

CSV文件:(a.CSV)

Python代码:(创建名称值)

python代码的结果:

ART0015-A
ADC00112-A
表:

A                              Name                     FamilyName
ART-B-C-ART0015-D-E01          NULL                        ART
ADC-B-C-ADC00112-V-E01         NULL                      ADC00112
A也是表中的一列(不是所有的A记录,而是其中的一些记录),并且基于我要更新的名称列的值。 我的数据库是SQL Server,我不知道如何更新SQL Server中的“名称”列,其中csv文件中的A值等于相对表中的A。 Python代码:

conn = pyodbc.connect('Driver={SQL Server}; Server=ipaddress; Database=dbname; UID=username; PWD= {password};')
cursor = conn.cursor()
conn.commit()
for row in ff.itertuples():
    cursor.execute('''UPDATE database.dbo.tablename SET Name where ?

)

conn.commit()
表中的预期结果

A                              Name                     FamilyName
ART-B-C-ART0015-D-E01          ART0015-A                 ART
ADC-B-C-ADC00112-V-E01         ADC00112-A                ADC00112

我将使用SQL临时表和内部联接来更新这些值。这只适用于更新SQL表中的记录子集。它还可以有效地更新许多记录

SQL游标
#减少插入时对服务器的调用次数
cursor.fast\u executemany=True
创建临时表 将值插入到临时表中
#仅插入键和更新的值
子集=ff['A','Name']]
#表单SQL插入语句
columns=“,”.join(subset.columns)
值=“(“+”,“.join([“?”]*len(subset.columns))+”)”
#插入
语句=“插入到#temp_tablename(“+columns+”)值中”+值
insert=[子集中x的元组(x)值]
cursor.executemany(语句,插入)
从临时表更新主表中的值
语句=“”
更新
数据表名
设置
u、 名字
从…起
表名为t
内连接
#temp_表名为u
在…上
u、 A=t.A;
'''
cursor.execute(语句)
放下临时桌子
我有一个CSV文件,列中有一个值。该文件是否可用于MySQL服务器访问?显示完整表格的创建表格、表格(3-5行)和CSV文件(2-3行)的一些数据示例以及所需结果(更新后的表格内容)。还要指定精确的MySQL版本。我更新了我的内容。但请注意,我不是在创建表。我有一个表,必须更新特定列。请注意,我没有创建表。但是这个表存在,所以它有一个可以提供的结构。我也共享了表结构/PS。显示的代码中的表名是
database.dbo.tablename
,它与SQL Server(MS SQL)方言匹配,而不是MySQL。请仔细查看您处理的数据库服务器。亲爱的Jason。谢谢使用UPDATE database.dbo.tablename查询而不创建临时表不是任何方法吗?您可以,但我认为这需要在Python循环中创建语法,因为需要SQL case语句。我认为这也是最有效的方法。
conn = pyodbc.connect('Driver={SQL Server}; Server=ipaddress; Database=dbname; UID=username; PWD= {password};')
cursor = conn.cursor()
conn.commit()
for row in ff.itertuples():
    cursor.execute('''UPDATE database.dbo.tablename SET Name where ?

)

conn.commit()
A                              Name                     FamilyName
ART-B-C-ART0015-D-E01          ART0015-A                 ART
ADC-B-C-ADC00112-V-E01         ADC00112-A                ADC00112
statement = "CREATE TABLE #temp_tablename(A VARCHAR(200), Name VARCHAR(200))"
cursor.execute(statement)
cursor.execute("DROP TABLE #temp_tablename")