首页 > 解决方案 > 如何使用python在sql中用空格插入列名中的值

问题描述

SQL数据库就像

ID 名称 名称 全名
1 乔恩 贝拉 乔恩贝拉
2 塞纳 大比 大比

我创建了一个名为 Info 的存储过程,我想通过 python 将更多数据插入到该表中。我在 csv 文件中读取了一个名为“df”的数据框。我想将 csv 文件值插入 SQL 数据库。

蟒蛇代码

    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 =' +databse+';\
           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()
  

运行此代码后,我收到错误“无效语法”全名。如何使用空格访问列名

标签: pythonsqlstored-procedures

解决方案


但是,不确定答案是否仍然相关,因为之前的答案不正确,下面的解决方案可能对面临此问题的其他人有所帮助。

假设列名不包含在文件中,将数据从 csv 文件插入 sql:

import csv
import pyodbc

server = "myservername"
database = "mydatabasename"

con = pyodbc.connect('DRIVER={ODBC Driver 13 for SQL server};\
           SERVER =' +server+';\
           DATABASE =' +databse+';\
           Trusted_Connection=yes;')

with open ('file path', 'r') as f:
    reader = csv.reader(f)
    data = next(reader)
    query = 'INSERT INTO database values ({0})'
    query = query.format(','.join('?' * len(data)))
    cursor = conn.cursor()
    for data in reader:
        cursor.execute(query, data)
    cursor.commit()

推荐阅读