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 ...
随机推荐
- ModuleNotFoundError: No module named 'PIL'
错误:ModuleNotFoundError: No module named 'PIL' 解决办法: pip install Pillow
- 解方程 2014NOIP提高组 (数学)
解方程 时间限制: 1 s 空间限制: 128000 KB 题目等级 : 钻石 Diamond 题目描述 Description 输入描述 Input Description 输入文 ...
- INT类型知多少
前言: 整型是MySQL中最常用的字段类型之一,通常用于存储整数,其中int是整型中最常用的,对于int类型你是否真正了解呢?本文会带你熟悉int类型相关知识,也会介绍其他整型字段的使用. 1.整型分 ...
- Oracle虚拟机配置
1.正常安装 .配置 3.监听配置 4.重启监听服务 5.防火墙端口放行 6.Oracle客户端连接工具测试
- ASP.NET MVC5 之 分部页
1.分部页 _PartialPage.cshtml @model List<string> <a>完美世界</a> @foreach (var item in Mo ...
- POJ 2194 2850 计算几何
题意: 给你了n个圆,让你摞起来,问顶层圆心的坐标 (数据保证间隔两层的圆不会挨着) 思路: 按照题意模拟. 假设我们已经知道了一层两个相邻圆的坐标a:(x1,y1)和b:(x2,y2) 很容易求出来 ...
- ViewPager(3)用viewpager实现tabhost
1.示例 2.代码 2.1 TabViewPagerMain.java import android.graphics.drawable.Drawable; import android.os.Bun ...
- [译]The multi Interface
The multi Interfacemulti接口 The easy interface as described in detail in this document is a synchrono ...
- C#基础 for 穷举、迭代
//循环可以解决的问题类型 //穷举,把所有可能的情况都走一遍,使用if条件筛选出来满足条件的情况. //单位给发了一张150元购物卡, //拿着到超市买三类洗化用品. //洗发水15元,香皂2元,牙 ...
- eclipse中folder、source folder和package的区别
今天做ssm项目时,突然发现了这个问题,特别好奇,sqlSessionFactory.xml文件如何找到: 1.放在src/hello目录下: InputStream inputStream = Re ...