mysqlclient的瘦包装。为查询提供python迭代器。提取光标。

pymysql-utils的Python项目详细描述


pymysql实用程序模块

pymysql_utils包通过 python比它的底层包更像python mysqlclient (以前称为mysql-python)或替代的底层包 pymysql。可以选择mysqlclient或pymysql作为 PyyyqLL uUTLS的建立。

常用mysql操作的方便方法,如 管理表、插入、更新和查询 可用。查询结果是具有next()nextall()方法

测试时间:

OSMySQLPython
macosmysql 8.03.7
macosmysql 8.02.7
ubuntu 16.04 Xenialmysql 5.73.6
ubuntu 16.04 Xenialmysql 5.72.7

快速启动

frompymysql_utils.pymysql_utilsimportMySQLDB# Create a database instance. For one approach to# dealing with password-protected databases, see# the Tips Section below.db=MySQLDB(user='myName',db='myDb')mySchema={'col1':'INT','col2':'varchar(255)',}db.createTable('myTable',mySchema)# Fill the table:colNames=['col1','col2']colValues=[(10,'row1'),(20,'row2'),(30,'row3'),]db.bulkInsert('myTable',colNames,colValues)# Result objects are iterators:forresultindb.query('SELECT col2 FROM myTable ORDER BY col1'):print(result)# row1# row2# row3

更详细一点

数据库连接封装在 MySQLDB。此实例可以维护多个查询 同时。每个查询结果都是一个iterator对象 从中可以一个接一个地检索结果元组, 使用next(),或者同时使用nextall()。这是 交叉多个查询的示例。假设 上表myTable在数据库中填充。

query_str1='''             SELECT col2               FROM myTable              ORDER BY col1             '''query_str2='''             SELECT col2               FROM myTable              WHERE col1 = 20                 OR col1 = 30           ORDER BY col1           '''results1=db.query(query_str1)results2=db.query(query_str2)# Result objects know their total result count:results1.result_count()# --> 3results2.result_count()# --> 2# The db object can retrieve the result count# by the query string:db.result_count(query_str1)# --> 3results1.next()# --> 'row1'results2.next()# --> 'row2'results1.next()# --> 'row2'results2.next()# --> 'row3'results1.next()# --> 'row3'results2.next()# --> raises StopIterationresults2.result_count()# --> raises ValueError: query exhausted.

提示:

  • 许多方法返回一个包含警告列表的二元组,以及 错误列表。

  • 检查in-code documentation 对于所有可用的方法。

  • 可以方便地完成许多频繁的sql操作 通过专门的方法:closecreateTabledropTableinsertbulkInserttruncateTableupdate

    这些或其他操作也可以通过使用 execute()提交任意sql

  • 对于已知返回单个结果的查询,这是一个有用的习惯用法, 例如计数:

    db.query('...').next()

  • 底层的mysqlclient包不公开mysql 5.7+ 登录路径选项。因此MySQLDB()调用需要包含 密码(如果需要)。一种避免将密码放入 您的代码是将密码放入一个受保护的文件中 目录,例如~/.ssh/mysql。然后从那里读取密码。

安装

# Possibly in a virtual environment:

pip install pymysql_utils
python setup.py install

# Testing requires a bit of prep in the local MySQL:# a database 'unittest' must be created, and a user# 'unittest' without password must have permissions:### CREATE DATABASE unittest;   # CREATE USER unittest@localhost;# GRANT SELECT, INSERT, UPDATE, DELETE,#       CREATE, DROP, ALTER#    ON `unittest`.* TO 'unittest'@'localhost';# The unittests give these instructions as well.# python setup.py test

选择“仅python”或“c-python”

默认情况下,pymysql实用程序使用mysqlclient,因此基于c MySQL服务器的API。有时可能需要使用 仅限python的解决方案。您可以强制pymysql实用程序使用 pymysql库而不是mysqlclient

只强制使用python的一个原因是 OpenSSL 1.1.1[a,b,c]和mysqlclient(截至2017年7月29日)。

要让pymysql实用程序使用python-only pymysql库,请执行以下操作:

  1. pymysql_utils/pymysql_utils_SAMPLE.cnf复制到 pymysql_utils/pymysql_utils.cnf
  2. 在这个新的配置文件中,更改
FORCE_PYTHON_NATIVE= False
   to
       FORCE_PYTHON_NATIVE= True

欢迎加入QQ群-->: 979659372 Python中文网_新手群

推荐PyPI第三方库


热门话题
java如何在sqlite数据库中保存特定列的历史记录   java如何更改/更新timeseriechart名称(JFreeChart)   java如何将整数转换为可绘制的   汇编什么解释Java的字节码   java查找已编译的类版本号   我应该什么时候在ColdFusion应用程序中使用Java?   java当一个实体的两个字段为(unique=true)时,如何处理JPA异常?   java为什么在所有其他实例都正确的情况下返回错误的布尔值?   java Hibernate每次都准备语句   java停留在平均字长上   对Java和日语字符进行编码   java如何将导致异常的方法的错误消息传递给侦听器中的onTestFailure方法   java代码没有打印结果   java为什么私有内部接口的方法必须是公共的?   休眠发生错误。有关详细信息,请参阅错误日志。JAVAlang.NullPointerException