10bet网址
连接器和api手册
下载本手册

6.2 Python开发人员指南

下面的指导方针涵盖了开发MySQL应用程序的一些方面,这些方面对于具有Python背景的开发人员来说可能不太明显:

  • 为了安全起见,不要在主脚本中硬编码连接和登录数据库所需的值。Python有一个约定config.py模块中,您可以将这些值与其余代码分开。

  • Python脚本经常在内存中构建和删除大型数据结构,直到可用RAM的限制。因为MySQL经常处理比可用内存大很多倍的数据集,所以优化存储空间和磁盘I/O的技术尤为重要。例如,在MySQL表中,您通常使用数字id而不是基于字符串的字典键,这样键值就紧凑且具有可预测的长度。的列尤其重要主键对于一个InnoDB表,因为这些列值在每个表中都是重复的二级索引

  • 任何接受输入的应用程序都必须能够处理坏数据。

    坏数据可能是偶然的,例如超出范围的值或格式化错误的字符串。应用程序可以使用服务器端检查,例如独特的约束而且非空约束,以防止坏数据到达数据库。在客户端,使用异常处理程序等技术来报告任何问题并采取纠正措施。

    坏数据也可能是故意的,代表了一个SQL注入攻击。例如,输入值可能包含引号、分号、而且_通配符和SQL语句中的其他重要字符。验证输入值以确保它们只有预期的字符。转义任何特殊字符,当替换到SQL语句中时,这些字符可能会改变预期的行为。在没有进行验证和转义之前,永远不要将用户输入的值连接到SQL语句中。即使在接受其他程序生成的输入时,也要预料到其他程序也可能已被破坏,并向您发送不正确或恶意的数据。

  • 由于SQL查询的结果集可能非常大,因此在循环遍历结果集时使用适当的方法从结果集中检索项。

    因为Python已经有了方便的模块,比如泡菜而且cPickle为了读写磁盘上的数据结构,您选择存储在MySQL中的数据可能具有特殊的特征:

    • 太大,一次无法全部装进内存。你使用选择语句,以仅查询所需的精确项,以及聚合函数执行跨多个项目的计算。您可以配置通过innodb_buffer_pool_size选项,以分配一定数量的RAM来缓存查询结果。

    • 太复杂了,不能用单一的数据结构来表示。将数据划分到不同的SQL表中。类可以重新组合来自多个表的数据加入查询通过设置,可以确保相关数据在不同表之间保持同步外键的关系。

    • 频繁更新,可能由多个用户同时更新。更新可能只影响数据的一小部分,因此每次写入整个结构是一种浪费。使用SQL插入更新,删除语句来同时更新不同的项,只将更改后的值写入磁盘。你使用InnoDB表和交易防止写操作相互冲突,并在更新底层数据时返回一致的查询结果。

  • 使用MySQL最佳实践提高性能可以帮助您的应用程序扩展,而不需要进行重大重写和架构更改。看到优化MySQL性能的最佳实践。它提供了SQL调优、数据库设计和服务器配置的指导方针和技巧。

  • 通过学习用于常见操作的MySQL SQL语句,可以避免重复工作:查询中使用的操作符、批量加载数据的技术等等。有些语句和子句是对SQL标准定义的基本语句和子句的扩展。看到数据操纵声明数据定义语句,SELECT语句用于语句的主要类。

  • 从Python发出SQL语句通常涉及声明非常长的,可能是多行的字符串字面量。因为SQL语句中的字符串文字可以由单引号、双引号或包含其中任何一个字符括起来,为了简单起见,您可以使用Python的三引号机制来括起整个语句。例如:

    “‘这个字符串是否包含‘单引号’或‘双引号’并不重要,只要不是3个在一行。’”

    你可以用任意一个用于三引号多行字符串字面量的字符。

  • 快速、可伸缩的MySQL应用程序的许多秘密都涉及在安装过程的最开始使用正确的语法创建表语句。例如,Oracle推荐引擎= INNODB子句用于大多数表,并使InnoDBMySQL 5.5及以上版本的默认存储引擎。使用InnoDBTables支持事务行为,有助于可伸缩性的读写工作负载,并提供自动崩溃恢复.另一个建议是声明一个数值主键对于每个表,它提供了最快的方法来查找值,并可以作为指向其他表中相关值的指针(a外键).同样在创建表语句中,使用满足应用程序需求的最紧凑的列数据类型有助于提高性能和可伸缩性,因为这使数据库服务器能够在内存和磁盘之间来回移动更少的数据。