Python insert MySQL _mysql_exceptions.ProgrammingError: (1064,

发布于 2022-09-01 17:17:26 字数 4869 浏览 73 评论 0

数据库结构
FieldTypeNullKeyDefaultExtra
+---------------+-------------+------+-----+---------+-------+
Device_Namevarchar(24)YESNULL
IP_Addressvarchar(24)YESNULL
DRACvarchar(24)YESNULL
Support_Groupvarchar(24)YESNULL
Domainvarchar(24)YESNULL
OUvarchar(24)YESNULL
IEMvarchar(24)YESNULL
OSvarchar(24)YESNULL
OS_Versionvarchar(24)YESNULL
Environmentvarchar(24)YESNULL
Riskvarchar(24)YESNULL
Functionvarchar(24)YESNULL
Appvarchar(24)YESNULL
Ownervarchar(24)YESNULL
Owner_mailvarchar(24)YESNULL
Countryvarchar(24)YESNULL
Cityvarchar(24)YESNULL
Sitevarchar(24)YESNULL
Locationvarchar(24)YESNULL
Categoryvarchar(24)YESNULL
Manufacturervarchar(24)YESNULL
Modelvarchar(24)YESNULL
Rackvarchar(24)YESNULL
Powervarchar(24)YESNULL
Serialvarchar(24)YESNULL
Warrantyvarchar(24)YESNULL
Decomm_Commvarchar(24)YESNULL
Projectvarchar(24)YESNULL
Managervarchar(24)YESNULL
Comm_datavarchar(24)YESNULL

代码

!/bin/python

import os
import xlrd
import MySQLdb
import re

DB_HOST='127.0.0.1'
DB_USER='root'
DB_PASS='Jun06jun'
DB_NAME='list'
db=MySQLdb.connect(host=DBHOST,user=DBUSER,passwd=DBPASS,db=DBNAME)
cursor=db.cursor()

a=[]
os.chdir('/home/ran/Desktop')
data=xlrd.open_workbook('list.xlsx')
table=data.sheets()[0]
nrows=table.nrows

for i in range(nrows):

    c = table.row_values(i)
    print len(c)
    for i_row in range(len(c)):
            if c[i_row] == '': c[i_row] = "NULL"
            sql="insert into JLL values(%s,%s,%s,%s,%s,%s,%s,%s,%s,%s,%s,%s,%s,%s,%s,%s,%s,%s,%s,%s,%s,%s,%s,%s,%s,%s,%s,%s,%s,%s) % (c[0],c[1],c[2],c[3],c[4],c[5],c[6],c[7],c[8],c[9],c[10],c[11],c[12],c[13],c[14],c[15],c[16],c[17],c[18],c[19],c[20],c[21],c[22],c[23],c[24],c[25],c[26],c[27],c[28],c[29])"
            cursor.execute(sql)

Excel 中某一列数据
AUCFD317-Joey
x.x.x.x
VMWare
Joey
Linux
N/A
N/A
Linux
Linux (MLOS)- RHEL 5 64bit Patch 3
Production
NULL
ePO Server
McAfee GTI Proxy Appliance 2.0.0
x
x
x
x
x
Server Room
Server-Virtual
VMware, Inc.
VMware Virtual Platform
NULL
NULL
Vmware
N/A - VM
NULL
NULL
NULL
NULL

发生的错误
mysqlexceptions.ProgrammingError: (1064, "You have an error in your SQL syntax; check the manual that corresponds to your MySQL server version for the right syntax to use near '%s,%s,%s,%s,%s,%s,%s,%s,%s,%s,%s,%s,%s,%s,%s,%s,%s,%s,%s,%s,%s,%s,%s,%s,%s,%s,%s' at line 1")

如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。

扫码二维码加入Web技术交流群

发布评论

需要 登录 才能够评论, 你可以免费 注册 一个本站的账号。

评论(2

哭了丶谁疼 2022-09-08 17:17:26

错误:

sql="insert into JLL values(%s,%s,%s,%s,%s,%s,%s,%s,%s,%s,%s,%s,%s,%s,%s,%s,%s,%s,%s,%s,%s,%s,%s,%s,%s,%s,%s,%s,%s,%s) % (c[0],c[1],c[2],c[3],c[4],c[5],c[6],c[7],c[8],c[9],c[10],c[11],c[12],c[13],c[14],c[15],c[16],c[17],c[18],c[19],c[20],c[21],c[22],c[23],c[24],c[25],c[26],c[27],c[28],c[29])"

正确:

sql="insert into JLL values('%s','%s','%s','%s','%s','%s','%s','%s','%s','%s','%s','%s','%s','%s','%s','%s','%s','%s','%s','%s','%s','%s','%s','%s','%s','%s','%s','%s','%s','%s')" % (c[0],c[1],c[2],c[3],c[4],c[5],c[6],c[7],c[8],c[9],c[10],c[11],c[12],c[13],c[14],c[15],c[16],c[17],c[18],c[19],c[20],c[21],c[22],c[23],c[24],c[25],c[26],c[27],c[28],c[29])

参考 @displaynone 的来个简化版,python的语法糖真多

sql="insert into JIL values(%s)" % (','.join('"' + str(item) + '"' for item in c))
奢望 2022-09-08 17:17:26

因为string被没有正确赋值,顺便贴上简化版。

c = [1 + i for i in range(29)]
sql = "insert into JLL value s(" + ','.join('%s' for i in range(29)) + ")"
finall = sql % tuple(c)

更简单版(为什么要折腾%s呢哈哈):

sql = "insert into JLL value s"+str(tuple(c))
~没有更多了~
我们使用 Cookies 和其他技术来定制您的体验包括您的登录状态等。通过阅读我们的 隐私政策 了解更多相关信息。 单击 接受 或继续使用网站,即表示您同意使用 Cookies 和您的相关数据。
原文