博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
python操作mysql方法和常见问题
阅读量:7241 次
发布时间:2019-06-29

本文共 1158 字,大约阅读时间需要 3 分钟。

 

安装mysql模块

sudo easy_install mysql-python

连接数据库

1 #!/usr/bin/env python2 #coding=utf-83 import MySQLdb4 conn = MySQLdb.connect('localhost','root','rootpass','oj',charset='utf8')5 cur = conn.cursor()

连接数据库时要注意数据库编码,不然一堆编码问题很愁人的~最好统一使用utf8编码。

执行sql语句

1 sql_content = "select * from user"2 cur.execute(sql_content)3 data = cur.fetchall()4 for i in data:5     print i

可以用fetchone来获取一条结果。如果是插入数据,要执行commit操作,不然数据不会被写入数据库。最好是执行完所有的sql语句之后再commit,实践证明,这样会带来很大的速度提升。

重点讲讲插入和更新数据

插入或更新数据有两种方法

1.拼接sql语句:

sql_content = "insert into table(key1,key2,key3) values (%s,%s,%s)"%(value1,value2,value3)cur.execute(sql_content)

2.用问号替代

sql_content = "insert into table(key1,key2,key3) values (?,?,?)"cur.execute(sql_content,(value1,value2,value3))

 

如果value的值存在不确定性,那么上面两条语句存在sql注入风险。

例如,如果value是一段html代码,html代码中如果存在引号(但引号或者双引号),如果不加处理,那么sql语句就将被截断,将会引发插入错误。

如果value中存在英文逗号,将会造成前面的key和后面的value不对应,也不能正确插入数据。

如果value中存在反斜线\,那么在python中反斜线后面的数据将被转义,如果不处理插入的话将会造成字符丢失或者其他不可遇见的结果。

因为在sql中和在python中有好多含有特殊含义的符号,如果不能很好的处理的话将会出现好多问题,幸好MYSQLdb模块给我们提供了一个escape_string方法,用这个方法能自动处理好上面的问题,特别方便。

此外,不建议一次插入多个数据,因为一次插入多个数据有可能造成key和value不能对应,昨天因为这个问题纠结了一下午。最后将一条sql语句拆成多条语句,也就是一次插入一个value才将问题解决

 

转载地址:http://dyybm.baihongyu.com/

你可能感兴趣的文章
深度了解git工具
查看>>
Integer cache -127 - 128
查看>>
如何拷贝一个wchar_t类型的字符串
查看>>
设计模式(观察者模式)
查看>>
对Promise中的resolve,reject,catch的理解
查看>>
NFS挂载异常 mount.nfs: Input/output error
查看>>
爬虫 Day03
查看>>
内存池的原理及实现
查看>>
phpqrcode生成动态二维码简单实例
查看>>
python-函数
查看>>
iOS的Mantle实战
查看>>
自动换行
查看>>
用例分析技术阅读笔记二
查看>>
Scrapy反爬
查看>>
(十三) 整合spring cloud云架构 - SSO单点登录之OAuth2.0 根据token获取用户信息(4)
查看>>
回流焊温度
查看>>
python 3
查看>>
并行与缓存的一些理解
查看>>
ibatis 开发中的经验 (三)Struts+Spring+Ibatis 开发环境搭建
查看>>
20175313 张黎仙《Java程序设计》第十周学习总结
查看>>