使用Python操作SQL时如何向带空格的列名插入数据
报错由两处不符合语法规则的写法导致,另有一处拼写错误也会触发运行报错,修改方案如下:
具体修改点
- SQL端:SQL Server中包含空格的列名需要用方括号
[]包裹,避免识别为两个独立标识符,将语句中的Full Name改为[Full Name] - Python Pandas端:DataFrame行对象的带空格列不能使用
.属性访问,必须用[]索引取值,将row.Full Name改为row['Full Name'] - 拼写修正:数据库连接字符串中的
databse拼写错误,修正为database
修正后的完整代码
import pyodbc import pandas as pd df = pd.read_csv("file path") server = "myservername" database = "mydatabasename" con = pyodbc.connect('DRIVER={ODBC Driver 13 for SQL server};\ SERVER =' + server + ';\ DATABASE =' + database + ';\ Trusted_Connection=yes;') cursor = con.cursor() for index, row in df.iterrows(): cursor.execute("INSERT INTO info (ID, Fname, Lname, [Full Name]) values(?,?,?,?)", row.ID, row.Fname, row.Lname, row['Full Name']) con.commit() # 操作完成后建议主动关闭连接释放资源 cursor.close() con.close()
可选优化建议
如果插入的数据量较大,逐行插入效率较低,可以使用executemany批量插入,性能提升明显:
# 把需要插入的字段转为元组列表 params = [tuple(x) for x in df[['ID', 'Fname', 'Lname', 'Full Name']].values] cursor.executemany("INSERT INTO info (ID, Fname, Lname, [Full Name]) values(?,?,?,?)", params) con.commit()
内容的提问来源于stack exchange,提问作者akriti
相关产品推荐
相关产品推荐

