MySQLdb 常见错误
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")
... ...
"""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
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
有时候需要链接,这种情况下切记不要用一个函数来return conn,否则会报超时。
例如:
这种写法可能可以用来查询,但是一般情况下增,删,改等都会报错的:
OperationalError: (1205, 'Lock wait timeout exceeded; try restarting transaction')
这是错误是个什么情况,什么锁啊之类的超时造成的。遇到这种情况,会直接导致一个问题,当你尝试去删除表中的所有数据的时候:
truncate table tb_test;
也会上报上述错误,解决办法是:
打开终端,重启mysql:"
sudo server mysql restart",然后重新truncate就可以。
正确的写法应该是:
class MainClass(object):
......
然后在代码中直接引用self.conn即可。
结束。
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)) 即可,有中文再加字符集就可以了,这个不需要加的~~