这里仅介绍 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 接口 (一)的更多相关文章

  1. MySQL Connector/Python 接口 (二)

    连接数据库 本文参见这里,示例如何连接MySQL 数据库. import mysql.connector from mysql.connector import errorcode # 连接数据库需要 ...

  2. MySQL Connector/Python 接口 (三)

    本文参见这里. 使用缓冲的 cursor,下例给从2000年加入公司并且还在公司的员工薪水从明天起加15% from __future__ import print_function from dec ...

  3. 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 ...

  4. 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 ...

  5. MySQL Connector/Python 安装、测试

         安装Connector/Python: # wget http://cdn.mysql.com/Downloads/Connector-Python/mysql-connector-pyth ...

  6. MySQL:Download Connector/Python

    MySQL Connector / Python是用于Python平台和开发的标准化数据库驱动程序. 此外,MySQL Connector / Python 8.0支持使用MySQL Server 8 ...

  7. python使用mysql的三个模块:mysql.connector、sqlalchemy、MySQLdb

    在python中使用mysql其实很简单,只要先安装对应的模块即可,那么对应的模块都有什么?官方也没指定也没提供,pcat就推荐自己遇到的3个模块:mysql.connector.sqlalchemy ...

  8. mysql.connector操作mysql的blob值

    This tutorial shows you how to work with MySQL BLOB data in Python, with examples of updating and re ...

  9. 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 ...

随机推荐

  1. python 两个文件夹里的文件名对比

    比如需要一个xml对应一个jpg时,有时候会不小心少了其中一个文件,这时可以用以下代码比较缺少的是哪个文件: # -*- coding: utf-8 -*- import os path1 = r'. ...

  2. POJ1673 ZOJ1776 三角形四心模板

    POJ1673 题中所述点即为三角形的垂心,用向量法可以轻松证明. 垂心 重心 外心 均位于三角形的欧拉线上,且三者有线性关系,于是,求出重心和外心即可求得垂心. 重心就是三点的平均值,外心可以通过解 ...

  3. 2-6 ES6常用语法

  4. robotframework - 框架做接口自动化get请求

    1.做get请求之前先安装 Request库,参考github上链接 :https://github.com/bulkan/robotframework-requests/#readme 2.请求&a ...

  5. 微信小程序获取自定义属性值

    写小程序的时候用到了自定义属性,特地来记录一下 特别是这个坑,必须得说一说 wxml <view class='box' bindtap='getValue'> <view clas ...

  6. 获取openid [微信小程序]

    public function wxapi(){ $data=$this->requestdata(); if(!$data['code']) exit(json_encode(array('s ...

  7. ASP.NET MVC 导出CSV文件

    ASP.NET MVC   导出CSV文件.直接贴代码 /// <summary> /// ASP.NET MVC导出CSV文件Demo1 /// </summary> /// ...

  8. SpringBoot-redis-session

    配置pom <parent> <groupId>org.springframework.boot</groupId> <artifactId>sprin ...

  9. RS485通信和Modbus协议(转)

    转自:http://www.51hei.com/bbs/dpj-23230-1.html 在工业控制.电力通讯.智能仪表等领域,通常情况下是采用串口通信的方式进行数据交换.最初采用的方式是RS232接 ...

  10. 关于使用 autoFac 的注入方法

    1.使用 NUGET 安装 Autofac 2.需要引用Autofac ASP.NET MVC 5 Integration  这个扩展包. 但有时候在NuGet中找不到 该包 需要使用“程序要控制器控 ...