python操作mysql方法和常见问题

本文涉及的产品
云数据库 RDS MySQL Serverless,0.5-2RCU 50GB
简介:

安装mysql模块

sudo easy_install mysql-python

连接数据库

1 #!/usr/bin/env python
2 #coding=utf-8
3 import MySQLdb
4 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才将问题解决

 

本文转自ma6174博客园博客,原文链接:http://www.cnblogs.com/ma6174/archive/2013/02/21/2920126.html,如需转载请自行联系原作者

相关实践学习
基于CentOS快速搭建LAMP环境
本教程介绍如何搭建LAMP环境,其中LAMP分别代表Linux、Apache、MySQL和PHP。
全面了解阿里云能为你做什么
阿里云在全球各地部署高效节能的绿色数据中心,利用清洁计算为万物互联的新世界提供源源不断的能源动力,目前开服的区域包括中国(华北、华东、华南、香港)、新加坡、美国(美东、美西)、欧洲、中东、澳大利亚、日本。目前阿里云的产品涵盖弹性计算、数据库、存储与CDN、分析与搜索、云通信、网络、管理与监控、应用服务、互联网中间件、移动服务、视频服务等。通过本课程,来了解阿里云能够为你的业务带来哪些帮助     相关的阿里云产品:云服务器ECS 云服务器 ECS(Elastic Compute Service)是一种弹性可伸缩的计算服务,助您降低 IT 成本,提升运维效率,使您更专注于核心业务创新。产品详情: https://www.aliyun.com/product/ecs
相关文章
|
1天前
|
缓存 NoSQL 关系型数据库
在Python Web开发过程中:数据库与缓存,MySQL和NoSQL数据库的主要差异是什么?
MySQL与NoSQL的主要区别在于数据结构、查询语言和可扩展性。MySQL是关系型数据库,依赖预定义的数据表结构,使用SQL进行复杂查询,适合垂直扩展。而NoSQL提供灵活的存储方式(如JSON、哈希表),无统一查询语言,支持横向扩展,适用于处理大规模、非结构化数据和高并发场景。选择哪种取决于应用需求、数据模型及扩展策略。
7 0
|
2天前
|
人工智能 Python
【Python实用技能】建议收藏:自动化实现网页内容转PDF并保存的方法探索(含代码,亲测可用)
【Python实用技能】建议收藏:自动化实现网页内容转PDF并保存的方法探索(含代码,亲测可用)
21 0
|
6天前
|
SQL 关系型数据库 MySQL
Python与MySQL数据库交互:面试实战
【4月更文挑战第16天】本文介绍了Python与MySQL交互的面试重点,包括使用`mysql-connector-python`或`pymysql`连接数据库、执行SQL查询、异常处理、防止SQL注入、事务管理和ORM框架。易错点包括忘记关闭连接、忽视异常处理、硬编码SQL、忽略事务及过度依赖低效查询。通过理解这些问题和提供策略,可提升面试表现。
25 6
|
7天前
|
存储 关系型数据库 MySQL
Python搭建代理IP池实现存储IP的方法
Python搭建代理IP池实现存储IP的方法
|
7天前
|
Python
Python动态IP代理防止被封的方法
Python动态IP代理防止被封的方法
|
7天前
|
数据采集 存储 安全
python检测代理ip是否可用的方法
python检测代理ip是否可用的方法
|
9天前
|
数据可视化 测试技术 Python
在Python和R中使用交叉验证方法提高模型性能
在Python和R中使用交叉验证方法提高模型性能
20 0
|
9天前
|
存储 监控 开发工具
对象存储OSS产品常见问题之python sdk中的append_object方法支持追加上传xls文件如何解决
对象存储OSS是基于互联网的数据存储服务模式,让用户可以安全、可靠地存储大量非结构化数据,如图片、音频、视频、文档等任意类型文件,并通过简单的基于HTTP/HTTPS协议的RESTful API接口进行访问和管理。本帖梳理了用户在实际使用中可能遇到的各种常见问题,涵盖了基础操作、性能优化、安全设置、费用管理、数据备份与恢复、跨区域同步、API接口调用等多个方面。
41 9
|
2天前
|
SQL 存储 关系型数据库
MySQL Cluster集群安装及使用
MySQL Cluster集群安装及使用
|
17天前
|
关系型数据库 MySQL 数据库
mysql卸载、下载、安装(window版本)
mysql卸载、下载、安装(window版本)