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 ...
随机推荐
- CF 1042 A Benches —— 二分答案(水题)
题目:http://codeforces.com/problemset/problem/1042/A 代码如下: #include<iostream> #include<cstdio ...
- mybatis批量update操作的写法,及批量update报错的问题解决方法
mybatis的批量update操作写法很简单,如下: public interface YourMapper extends BaseMapper<YourExt> { void upd ...
- Objective-C NSObject与运行时系统
创建: 2018/01/26 完成: 2018/02/02 遗留: TODO NSObject 运行时系统 程序运行时候起作用的系统? NSObject是运行时系统的接口(API) 属性 只有一 ...
- MySQL基础 — 详细安装
MySQL--安装 打开MySQL 5.5 安装文件开始: 点击Next 打上勾,再点击Next 点击Custom,说明如下: Typical(典型安装) Installs the mo ...
- bzoj 1571: [Usaco2009 Open]滑雪课Ski【dp】
参考:https://blog.csdn.net/cgh_andy/article/details/52506738 没有get到什么重点的dp--做的莫名其妙 注意滑雪一个坡可以滑很多次 设f[i] ...
- 清北考前刷题day4早安
LI /* 没有考虑次大值有大于一个的情况 */ #include<iostream> #include<cstdio> #include<cstring> # ...
- 数学/思维 UVA 11300 Spreading the Wealth
题目传送门 /* 假设x1为1号给n号的金币数(逆时针),下面类似 a[1] - x1 + x2 = m(平均数) 得x2 = x1 + m - a[1] = x1 - c1; //规定c1 = a[ ...
- [转]Git使用基础篇
http://www.git-scm.com/ https://try.github.io/levels/1/challenges/1 本文转自:http://www.open-open.com/li ...
- 使用纯css鼠标移入效果,炫酷的旋转正方体
首先我们需要创建几个盒子 </div> <div class="wrap"> <div class="cube"> < ...
- phpcms标签用法(转)
1.显示指定catid的栏目名称和链接 {$CATEGORYS[25]['catname']} {$CATEGORYS[25]['url']} 获取父栏目id/获取父栏目名称 $CATEGORY[ ...