最近写了一个python把图片写入Mysql数据库的小程序,在设计查询函数时报出
“not all arguments converted during bytes formatting” 的错误,百度了一堆方法,都没啥子用,最后在菜鸟教程里看到了一段代码,顿时有了启发!菜鸟里的代码是这样的:
import mysql.connector
mydb = mysql.connector.connect(
host="localhost",
user="root",
passwd="123456",
database="runoob_db"
)
mycursor = mydb.cursor()
sql = "SELECT * FROM sites WHERE name = %s"
na = ("RUNOOB", )
mycursor.execute(sql, na)
myresult = mycursor.fetchall()
for x in myresult:
print(x)
而我自己的代码长的是下面这样:
# -*- coding: utf-8 -*-
import MySQLdb
#传入的参数为所需的图片表名以及对应的图片名
#定义一个检查插入结果的函数
def check_img(table,name):
#打开数据库连接
db = MySQLdb.connect("localhost","root","123456","url", charset='utf8')
#连接数据库使用的用户名为:"root",密码为"123456"
#使用cursor获取游标
cursor = db.cursor()
#SQL查询语句
SQL = "SELECT IMG_CODE FROM {IMG} WHERE IMG_NAME =%s".format(IMG = table)
args = (name)
try:
# 获取单条记录
cursor.execute(SQL,args)
data =cursor.fetchone() #fetchone方法返回的是一个元组
result = data[0]
print(result)
return result
except Exception as e:
print(e)
#关闭游标
cursor.close()
#关闭数据库
db.close()
怎么样?找到错误没?哈哈,原来是这个地方还得加个逗号!!!至于原因嘛,我也不晓得!有大佬知道的话请指教!
综上,“not all arguments converted during bytes formatting” 的解决方法就是在arg 参数的里面加上一个逗号,适用于sql语句中只有一个%s的情况,有两个%s及以上的情况不加也不会报错,原因不详!下面这个函数就能正常工作,没有报错。
#插入函数需要提供表名和文件名以及图片的二进制数据
def insert_img(table,name,img_code):
#打开数据库连接
db = MySQLdb.Connect("localhost","root","123456","url", charset='utf8')
#使用cursor获取游标
cursor = db.cursor()
#SQL语句
SQL_insert = "INSERT INTO {tableName} (IMG_NAME,IMG_CODE) VALUES (%s, %s)".format(tableName = table)
print(MySQLdb.Binary(img_code))
args = (name,MySQLdb.Binary(img_code))
try:
#执行sql语句并提交事务
cursor.execute(SQL_insert,args)
db.commit()
except Exception as e:
#如果发生错误,事务回滚,撤销修改!
db.rollback()
print(e)
#关闭游标
cursor.close()
#关闭数据库的连接
db.close()