【原创】 python MySQLdb 异常总结

MySQLdb 常见错误
有时候需要链接,这种情况下切记不要用一个函数来return conn,否则会报超时。
例如:
    def get_conn():
        conn=Mysqldb.connect(
            host='localhost',
            user='root',
            passwd='123',
            port=3306,
            db='dataservice',
            charset='utf8'
            )
        conn.set_character_set("utf8")
        return conn
    conn = get_conn()
    cur = conn.cursor()
    exec = cur.execute("select * from tb_test")
    ... ... 
这种写法可能可以用来查询,但是一般情况下增,删,改等都会报错的:
OperationalError: (1205, 'Lock wait timeout exceeded; try restarting transaction')
这是错误是个什么情况,什么锁啊之类的超时造成的。遇到这种情况,会直接导致一个问题,当你尝试去删除表中的所有数据的时候:
truncate table tb_test;
也会上报上述错误,解决办法是:
打开终端,重启mysql:" sudo server mysql restart",然后重新truncate就可以。
正确的写法应该是:
class MainClass(object):
    """docstring for MainClass"""
    def __init__(self):
        super(MainClass, self).__init__()
        conn=Mysqldb.connect(
            host='localhost',
            user='root',
            passwd='123',
            port=3306,
            db='dataservice',
            charset='utf8'
            )
        conn.set_character_set("utf8")
        self.conn = conn
......
然后在代码中直接引用self.conn即可。
    def update_status(self, id):
        cur=self.conn.cursor()
        a = cur.execute("update tb_test set status='%s' where id='%s'" % (id)
        self.conn.commit() #记得提价更改
        cur.close() #记得关闭游标,否则下次使用游标会报错的噢~~
        return a
结束。



ERROR 1267 (HY000): Illegal mix of collations (utf8_ unicode _ci,IMPLICIT) and (utf8_ general _ci,IMPLICIT) for operation '<='
这是今天遇到的一个问题,存储过程出来的Bug,自己的电脑上就木有问题,上了服务器就出问题了。我的mysql版本是5.5.35,服务器是5.5.34,开始以为是sql版本的问题,后来重新看了一下错误提示,跟数据库编码和存储过程编码有问题。
CREATE PROCEDURE `fs`(s_time varchar(10),e_time varchar(10) charset 'utf8')
... ...
数据库默认编码是general,而我存储过程是utf8(unicode),导致sql中的for循环有一个大于小于等于比较报错《 mysql while do循环,时间分片》~~
CREATE PROCEDURE `fs`(s_time varchar(10),e_time varchar(10)) 即可,有中文再加字符集就可以了,这个不需要加的~~
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值