python错误笔记(杂)

1.

TypeError:not all arguments converted during string formatting

这个问题一般和格式化有关系,正确的格式应该是:
‘delete from %s %s’ % (table_name, where_condition)
其中格式化中接受元组或者list形式内容,因此也可以是
‘delete from %s %s’ % [table_name, where_condition]

当我的sql语句是要传入pandas的read_sql_query中时,我发现怎么改这个格式化都不起效果后,我查看了read_sql_query中的所有可以使用参数,其中有params选项,即将%s中的数据以params传入的方式实现,此时验证报错问题也得到了解决:

pd.io.sql.read_sql_query(sql, con=engine, params=[...])

2.当我的sql语句中表名需要以参数的形式传入的时候,发现并不可行。通过百度查到的许多都是采用动态表名,但也发现发现MYSQL不支持直接使用变量做表名。在python中通过两个方法解决此问题:
(1)pandas中有pd.io.sql.read_sql_table(table_name, con=engine),它可以通过你的给的表名参数读取将该表数据形成dataframe的形式返回。
(2)可以设置方法拼装字符串通过将参数拼装成一个sql语句,参考链接:https://www.cnblogs.com/guohaojintian/p/5994472.html

def remove_data(table_name, where_condition):
    if (where_condition != ' '):
        str = 'where '
        for key_value in where_condition.keys():
            value = where_condition[key_value]
            str = str + '`' + key_value + '`' + ' = ' + '\'' + value + '\'' + ' and '
        where_condition = str[:-5]
        table_name = '`'+table_name+'`'
        sql = 'delete from %s %s' % (table_name, where_condition)
        # print(sql)
        return sql

在应用中再进行:

  try:
    pd.io.sql.read_sql_query(sql, con=engine)
  except:
    print('deleted ')

这里之所以运用了try-catch 接受,是因为read_sql可以接受SQL语句,包括增删改查。但是DELETE语句不会返回值(但是会在数据库中执行),UPDATE,SELECT等会返回结果.删除插入更新操作没有返回值,程序会抛出:ResourceClosedError at …This result object does not return rows.,终止程序。如果想继续运行,可以try捕捉此异常。
参考链接:https://www.cnblogs.com/cymwill/p/8289367.html

3.这是一个关于mysql规范的问题。
(1)mysql不建议表名纯数字,因此sql中表名直接是数字的话需要带有`符号,也就是1键的前一个键,同样字段不建议有带‘-’,但是如果需求上需要的话也可以带`即可

delete from `201501` where `zon-order-id` = '113-2826971' 
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值