我无法弄清楚我对这个插入语句做错了什么。我得到的错误是:
"Failed processing format-parameters; %s" % err)
mysql.connector.errors.ProgrammingError: Failed processing format-parameters; 'MySQLConverter' object has no attribute '_navigablestring_to_mysql'
具体的代码行是:
update = '''INSERT INTO myDB.newtable (ID,Record,Latitude,Longitude,code) VALUES (%s,%s,%s,%s,%s)'''
cursor2.execute(update,(ID,Record,Latitude,Longitude,code))
cnx2.commit()
我也试过这种格式:
update = ("INSERT INTO myDB.newtable (ID,Record,Latitude,Longitude,code) VALUES (%s, %s, %s, %s, %s)")%(ID,Record,Latitude,Longitude,code)
cursor2.execute(update)
并收到此错误:
mysql.connector.errors.ProgrammingError: 1054 (42S22): Unknown column '45676kb' in 'field list'
。
45676kb
只是整个价值的一部分。完整的字符串是45676kb-98734-98734-123nn
。
我认为第二次尝试的语法更正确,因为我至少得到了一个sql错误,但我无法弄清楚如何使用mysql.connector正确格式化我的insert语句。
答案 0 :(得分:3)
第一个选项是将查询参数放入查询的正确方法 - 它被称为参数化查询。在这种情况下,您要让数据库驱动程序转义查询参数,将它们安全地插入到查询中并处理Python到MySQL类型的转换。
您获得的错误意味着它无法将ID
,Record
,Latitude
,Longitude
或code
参数值之一转换为有效的MySQL数据库类型。具体来说,请参阅您发布的变量类型:
ID <type 'unicode'>
Record <type 'unicode'>
Latitude <class 'bs4.element.NavigableString'>
Longitude <class 'bs4.element.NavigableString'>
code <type 'unicode'>
问题在于Latitude
和Longitude
- 它们是BeautifulSoup
的{{3}}类实例 - MySQL转换器难以理解如何转换a NavigableString
将对象转换为有效的MySQL类型。事先明确地将它们转换为字符串:
update = """
INSERT INTO
myDB.newtable
(ID,Record,Latitude,Longitude,code)
VALUES
(%s,%s,%s,%s,%s)
"""
cursor2.execute(update, (ID, Record, str(Latitude), str(Longitude), code))