python mysql问题汇总

python mysql问题汇总

前言

记录下工作中的问题及解决方法

正文

  1. python中mysql查询返回字典
  2. 查询mysql数据,表中有数据,select条件无异常就是查不出数据。
  3. 生成流水序号
  4. 字符编码“UnicodeDecodeError: ‘utf8’ codec can’t decode byte 0xce in position 149: invalid continuation byte”

问题一:

在连接数据库时设置cursorclass类如下:

self.conn = MySQLdb.connect(host=gl.DBSEVER['IP'], port=gl.DBSEVER['PORT'],
user=gl.DBSEVER['USER'], passwd=gl.DBSEVER['PASSWORD'],
db=gl.DBSEVER['DBNAME'],
charset="utf8",
cursorclass=MySQLdb.cursors.DictCursor
)

问题二:
在5.1.73版本和5.6.26版本的mysql中查询语句没有问题;但在5.7.19版本的mysql中一直查不到。使用数据库工具执行命令可查。
最终确实是事务问题
在执行select语句后提交事务。

sql = "select * from test";
cursor = conn.cursor()
cursor.execute(sql)
conn.commit()

问题三:
网上好多使用mysql存储过程实现,我自己就使用python代码试了下。10个线程同时取流水号没有重复。效率没测试。

def getSeqno(self):
    '''取流水号'''
    try:
        cur = self.conn.cursor()
        cur.execute("update seqlist set id = id + 1 where NAME='SEQNO'")
        cur.execute('select id from seqlist')
        self.conn.commit()
        row = cur.fetchone()
        cur.close()
    except Exception, e:
        gl.logmain.error(e)
        raise
    seq = row['id']
    return seq

问题四:
python字符编码与mysql字符编码不符合。

  1. 数据库设置成utf8编码

    vi/etc/my.cnf  
    在里面加入,已经有[XXX]的,在里面直接加入即可。   
    [mysqld]  
    character-set-server=utf8   
    [client]  
    default-character-set=utf8   
    [mysql]  
    default-character-set=utf8   
    
  2. python接连数据库设置utf8编码

    self.conn = MySQLdb.connect(host=gl.DBSEVER['IP'], port=gl.DBSEVER['PORT'],
    user=gl.DBSEVER['USER'], passwd=gl.DBSEVER['PASSWORD'],
    db=gl.DBSEVER['DBNAME'],
    charset="utf8",
    cursorclass=MySQLdb.cursors.DictCursor)
    
  3. 将数据语句转成utf8编码格式

    import sys
    reload(sys)
    sys.setdefaultencoding('utf-8')
    
    sql = "UPDATE tset set a=%s", "你好“)
    sql = sql.encode('utf-8')
    

其它记录:
mysql插入字典

row = dict(row)
columns = ', '.join(row.keys())
placeholders = ', '.join(['%s'] * len(row))
sql = "INSERT into test ( %s ) VALUES ( %s )" % (columns, placeholders)
sql = sql.encode('utf-8')

mysql更新字典

row = dict(row)
columns = '=%s, '.join(row.keys())
columns = columns + '=%s'
sql = "UPDATE test set %s where idx='%s' " % (columns, "100")
sql = sql.encode('utf-8')
cur = self.conn.cursor()
cur.execute(sql, row.values())

总结

工作中问题还是很多,这只是一小部分。记录下以备用

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
Python中使用MySQL去重可以使用两种方法,一种是通过编写MySQL查询语句,另一种是借助Python的集合数据类型。下面分别介绍这两种方法。 方法一:使用MySQL的DISTINCT关键字 可以使用SQL语句中的DISTINCT关键字完成去重操作。例如,假设有一张名为student的表,其中有一个字段为name,我们需要对name字段进行去重操作,可以使用如下的SQL语句: SELECT DISTINCT name FROM student; 执行这个查询语句后,返回的结果即为去重后的name字段值。需要注意的是,如果需要去重的字段不止一个,可以在DISTINCT后面列出多个字段名。 方法二:使用Python的集合类型 Python中的集合类型是一种无序且不重复的数据结构,可以用来实现去重。假设有一个名为names的列表,我们需要对其进行去重操作,可以利用Python的set类型来完成。示例代码如下: names = ['Tom', 'Jerry', 'Tom', 'Alice', 'Jerry'] unique_names = list(set(names)) 上述代码中,通过set函数将names列表转换成集合类型,由于集合类型的特性,会自动去除重复的元素。然后再通过list函数将集合类型转换回列表类型。最终的结果unique_names即为去重后的列表。 总结: 通过以上两种方法,我们可以在Python中实现MySQL的去重操作。根据具体的需求和场景选择合适的方法来去重。如果是对数据库中的数据进行去重,建议使用SQL语句中的 DISTINCT 关键字;如果是对Python中的集合进行去重,可以使用集合类型来实现。

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值