pymysql实用程序模块
pymysql_utils包通过
python比它的底层包更像python mysqlclient
(以前称为mysql-python)或替代的底层包
pymysql。可以选择mysqlclient或pymysql作为
PyyyqLL uUTLS的建立。
常用mysql操作的方便方法,如
管理表、插入、更新和查询
可用。查询结果是具有next()和
nextall()方法
测试时间:OSMySQLPythonmacosmysql 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 col2FROM myTableORDER BY col1'''query_str2='''SELECT col2FROM myTableWHERE col1 = 20OR col1 = 30ORDER 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.
提示:许多方法返回一个包含警告列表的二元组,以及
错误列表。
可以方便地完成许多频繁的sql操作
通过专门的方法:close,createTable,dropTable,insert,
bulkInsert、truncateTable和update。
这些或其他操作也可以通过使用
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库,请执行以下操作:将pymysql_utils/pymysql_utils_SAMPLE.cnf复制到
pymysql_utils/pymysql_utils.cnf
在这个新的配置文件中,更改FORCE_PYTHON_NATIVE= False
to
FORCE_PYTHON_NATIVE= True
欢迎加入QQ群-->: 979659372
推荐PyPI第三方库