MySQL Connector/Python 接口 (一)
这里仅介绍 MySQL 官方开发的 Python 接口,参见这里:
https://dev.mysql.com/doc/connector-python/en/
Chapter 1 Introduction to MySQL Connector/Python
这个接口是用纯Python写成的,仅依赖 Python Standard Library。
MySQL Connector/Python 支持以下几点:
1、MySQL Server 版本到 5.7 及 5.7 版本的几乎所有特性;
2、支持Python 和 MySQL 参数的数据类型之间的双向转换,例如 Python 的 datetime 和 MySQL 的 DATETIME;
3、MySQL 对标准的SQL语法的所有的拓展;
4、协议压缩,这使得客户端和服务器之间的数据流被压缩了;
5、使用 TCP/IP sockets 建立链接,在 Unix 平台使用 Unix sockets 建立链接;
6、使用 SSL 建立安全的 TCP/IP 链接;
7、自包含驱动程序。意味着 Connector/Python 在 Python 标准库之外不需要 MySQL 客户端库程序或者任何 Python 模块。
Chapter 2 Guidelines for Python Developers
如下的设计指南覆盖了开发 MySQL 应用程序的各个方面,可能对于有Python背景的开发人员来说不是那么明显。
1、出于安全性考虑,不要把连接、登录到数据库中的值硬编码到主脚本文件中。Python 有一个 config.py 模块的习俗,你可以把这些值保存到这里;
2、受到可以使用的RAM的限制,Python 脚本经常在内存中构建和拆解大的数据结构。因为MySQL经常处理好几倍大于可用内存的数据集合,能优化存储空间和磁盘I/O的技术是尤其重要的。例如,在MySQL 表格中,往往使用数值型IDs而不是基于字符串的词典关键值,因此键值是紧凑的并且长度是可以预料的。对于那些构成InnoDB表格中的Primary Key 的列,这一点是尤为重要的,因为这些列值使用第二索引值复制的;
3、所有接受输入的应用程序必须处理坏的数据:
坏的数据可能是意外的,例如值超出范围,或者字符串格式错误。应用程序可以使用服务器端的例如 unique constraints 和 NOT NULL constraints 的检查,来保证坏的数据放到数据库中。在客户端,使用异常检查来报告任何的问题并且采取纠正措施。
坏的数据也可能是蓄意的,典型的代表是SQL注入攻击。例如,输入值允许引号,分号,“%” 和下划线通配符字符等其他的在SQL语句中有特殊意义的字符。验证输入值确保他们只有预期的字符。当把字符插入到SQL语句中转义任何可能导致故意的行为的字符。在未经验证和转义之前,永远不要把用户输入的字符串插入到SQL语句中。即便是接收其他应用程序产生的字符串,期待其他的应用程序可能已经让步,传递给你不正确的或者有害的数据。
4、因为SQL查询语句的结果集合可能非常的大,使用合适的方法在循环中遍历得到结果值。当你知道结果集合只有一行,fetchone() 返回一个项目;当你知道结果结合有有限的行并且能够轻而易举地放到内存中, fetchall() 返回所有的项目。当你不能决定结果集合的大小时,fetchmany() 通用方法,在循环中调用它知道结果结合没有更多的值。
5、由于Python已经有非常方便的模块例如 pickle 和 cPickle 用来读取磁盘上的数据结构,相反的你选来保存到MySQL中的数据很有可能有特殊的特征:
1)太大以至于不能同时加载到内存中。使用 SELECT 语句来查询你需要的精确的项目,使用聚合函数在多个项目上做计算。在 MySQL 服务器上使用选项 innodb_buffer_pool_size 来控制缓存查询结果占用的RAM总容量。
2)太复杂以至于不能使用一个单一的数据结构来表达。把数据拆分到不同的表格中。在查询语句中使用 join 关键字来组个多个表格。使用 foreign key 来包保证不同表格之间的同步关系。
3)更新太频繁,有可能是多个用户同时使用。更新可能只是影响数据的一小部分,但是每一次都要重写整个数据机构就很浪费。使用 INSERT, UPDATE, DELETE 语句并行地更新不同的项目,只把有改变的值写到磁盘中。使用 InnoDB 表格和事务来保证写操作不会互相冲突,并且保证查询语句返回的结果的一致性,即便底层数据被更新了。
6、使用 MySQL 性能最好的惯例,能够帮助你的应用程序在不需要重大的重写或者架构调整的情况下裁剪。它提供了SQL微调,设局库设计,服务器配置的准则和小提示。
7、没有必要重造轮子,使用 MySQL 的 SQL 语句做常用操作:查询中的操作符,成批导入数据的技巧,等等。有一些语句和自居是对SQL标准的扩展。
8、在Python中发起SQL语句可能用到非常长的有可能是多行的字符串。因为SQL语句中的字符串字面值可能用单引号括双引号或者其中之一的括起来,为了简便,可以使用Python的3引号机智来包裹SQL语句,例如:
"""It doesn't matter if this string contains 'single'
or "double" quotes, as long as there are't 3 in a
row."""
9、快速的,可扩展的 MySQL 应用程序秘诀之一,就是在设计阶段最开始的使用 CREATE TABLE 语句中使用了正确的语法。例如 Oracle 推荐大多数的表格使用 ENGINE=INNODB 字句,并且从 MySQL5.5 及以上版本中都用 InnoDB 作为默认的存储引擎。另外一个推荐值就是每个表格使用数值型的 primary key 。
下一篇讲实际操作。
MySQL Connector/Python 接口 (一)的更多相关文章
- MySQL Connector/Python 接口 (二)
连接数据库 本文参见这里,示例如何连接MySQL 数据库. import mysql.connector from mysql.connector import errorcode # 连接数据库需要 ...
- MySQL Connector/Python 接口 (三)
本文参见这里. 使用缓冲的 cursor,下例给从2000年加入公司并且还在公司的员工薪水从明天起加15% from __future__ import print_function from dec ...
- Snippet: Fetching results after calling stored procedures using MySQL Connector/Python
https://geert.vanderkelen.org/2014/results-after-procedure-call/ Problem Using MySQL Connector/Pytho ...
- Installing MySQL Connector/Python using pip v1.5
The latest pip versions will fail on you when the packages it needs to install are not hosted on PyP ...
- MySQL Connector/Python 安装、测试
安装Connector/Python: # wget http://cdn.mysql.com/Downloads/Connector-Python/mysql-connector-pyth ...
- MySQL:Download Connector/Python
MySQL Connector / Python是用于Python平台和开发的标准化数据库驱动程序. 此外,MySQL Connector / Python 8.0支持使用MySQL Server 8 ...
- python使用mysql的三个模块:mysql.connector、sqlalchemy、MySQLdb
在python中使用mysql其实很简单,只要先安装对应的模块即可,那么对应的模块都有什么?官方也没指定也没提供,pcat就推荐自己遇到的3个模块:mysql.connector.sqlalchemy ...
- mysql.connector操作mysql的blob值
This tutorial shows you how to work with MySQL BLOB data in Python, with examples of updating and re ...
- How to Access MySQL with Python Version 3.4
http://askubuntu.com/questions/630728/how-to-access-mysql-with-python-version-3-4 How to Access MySQ ...
随机推荐
- 从Linux内核中获取真随机数
内核随机数产生器 Linux内核实现了一个随机数产生器,从理论上说这个随机数产生器产生的是真随机数.与标准C库中的rand(),srand()产生的伪随机数不同,尽管伪随机数带有一定的随机特征,但这些 ...
- sql复杂查询语句总结
转自:http://blog.csdn.net/fengfeng91/article/details/15029173 create table student( sno varchar2(10) p ...
- kernel信息及其相关命令
内核 linux内核是单内核体系设计.但充分借鉴了微内核设计体系的优点,为内核引入模块化机制 内核组成部分: kernel: 内核核心,一般为bzImage,通常在/boot 目录下,名称为vmlin ...
- linux下jdk环境变量配置深度分析----解决环境变量不生效的问题
1.linux下jdk环境变量配置 是否需要配置环境变量,主要看java -version 显示的版本是否为你期望的版本 1.1 不需要配置环境变量的情况 使用java -version查看,版本显示 ...
- Spring.Net学习笔记(6)-方法注入
一.开发环境 系统:win10 编译器:VS2013 二.涉及程序集 Spring.Core.dll 1.3.1 Common.Logging.dll 三.开发过程 1.项目结构 2.编写Mobile ...
- myeclipse中js文件报错
这几天在myeclipse中添加文件时,会报错,但是代码是从官网上下载的,没有错误,只是myeclipse的检查较为严格.在网上找到解决方案,希望可以帮到强迫症的人. 解决步骤: 1.window→P ...
- 树莓派zero_w 串口的使用(解决usb可用rxtx不可用的问题)
2018-06-0212:10:14 查了很多资料,搞了一上午,终于解决了,之前看教程做了树莓派与arduino的通信,GPIO的RXTX测试失败,无奈只能用USB,效果还可以,可是今天我想用RXTX ...
- Apache ab使用指南
Apache ab使用图例: 其中比较重要的两个指标要特别注意: Requests per second:表示平均每秒事务数,相当于LR的TPS Time per second:用户请求平均响应时间和 ...
- python自动化--语言基础二运算符、格式化输出、条件语句、循环语句、列表、元组
运算符包括:算术运算符.比较运算符.赋值运算符.逻辑运算符.成员运算符.身份运算符. 算术运算符 % 取模(余数) // 取相除的整数部分 / (5/2=2.5) 比较运算符 == 等于 ...
- phpcms v9文章内容页调用上一篇下一篇的方法(转)
phpcms v9文章内容页调用上一篇下一篇的方法如下,魔客吧(www.moke8.com)提示您直接摘取如下代码中的红色部分即可: 上一篇:{$previous_page[url]}" t ...