码迷,mamicode.com
首页 > 编程语言 > 详细

connector for python

时间:2019-04-08 00:58:29      阅读:229      评论:0      收藏:0      [点我收藏+]

标签:应该   test   分离   size   扩展   ble   exe   can   不能   

MySQL — 连接器

连接器的概念

它们往往是一类Python,或者是一类已经写好的Python库。这些库提供了我们Python去连接数据库服务器的基本功能。

? 既然它是一个包,那么我们首先学会导入这个包

#! /usr/bin/env python3
# coding: utf-8
?
from mysql import connector
print(‘导入成功‘)

执行以上代码

$ python3 test_connector.py
导入成功

表示我们成功导入了相关的包或者模块

连接器语法

要学习连接器语法,我们可以参考:https://dev.mysql.com/doc/connector-python/en/

连接

连接有两个部分,不可或缺:

  • 连接信息: 主机端口用户名密码数据库名

    db_config = {
        ‘host‘: ‘localhost‘,#主机
        ‘port‘: 3306,#端口
        ‘user‘: ‘???‘,#用户
        ‘passwd‘: ‘???‘,#密码
        ‘db‘: ‘python‘,#连接的数据库
    }
  • 连接函数:所有连接器都有的函数,名字叫connect

     
    from mysql.connector import connect

    注意:该函数反回的是一个代表着连接的对象,我们可以把这个连接对象看成是客户端。

游标

游标是从一个特定的连接中获取的,cnn中有一个cursor方法,可以返回一个游标对象。

cur = cnn.cursor()

操作数据库都是通过游标来进行,一个连接可以产生多个游标。

游标,其中有一个execute方法,只需要把我们需要执行的SQL语句当作参数传入其中,就可以让连接器指挥MySQL服务器执行语句。

注意: execute并没有返回值

那么,查处来的星系在哪呢?

其实,查出来的信息就在我们的游标中。

由于,我们查出来的数据都是以行的形式出现的(查出来的是一条条记录),全部存在游标里,当我们迭代这个游标的时候,我们其实是依次的拿到了其中的行(记录),每次输出我们的迭代项的时候,我们就是输出了其中的一行。

#! /usr/bin/env python3
# coding: utf-8
?
from mysql.connector import connect
?
db_config = {
    ‘host‘: ‘localhost‘,
    ‘port‘: 3306,
    ‘user‘: ‘???‘,
    ‘passwd‘: ‘???‘,
    ‘db‘: ‘mysql‘,  # 相当于自动USE
}
?
cnn = connect(**db_config)
cur = cnn.cursor()
print(cur.execute(‘SELECT Host, User, authentication_string FROM user‘))
?
for i in cur:
    print(i)

执行上面的代码

tuple@MyVM:~/testgit/learning_connector$ python3 test_cursor.py
None
(bytearray(b‘localhost‘), bytearray(b‘root‘), b‘*81BCF9486900824FB0A3746219755FC21C50D058‘)
(bytearray(b‘localhost‘), bytearray(b‘mysql.sys‘), b‘*THISISNOTAVALIDPASSWORDTHATCANBEUSEDHERE‘)
(bytearray(b‘localhost‘), bytearray(b‘debian-sys-maint‘), b‘*599D0C45E62D3A9D58D74C0C5008688F13738AE5‘)
(bytearray(b‘%‘), bytearray(b‘tuple‘), b‘*6BB4837EB74329105EE4568DDA7DC67ED2CA2AD9‘)

连接器,会自动帮我们,在Python的数据类型,和Mysql数据类型中自动转换。

关闭

使用连接器,和使用文件一样,一定要记得关闭,顺序是

  1. 先关游标
  2. 再关连接
 
#! /usr/bin/env python3
# coding: utf-8
?
from mysql.connector import connect
?
db_config = {
    ‘host‘: ‘localhost‘,
    ‘port‘: 3306,
    ‘user‘: ‘???‘,
    ‘passwd‘: ‘???‘,
    ‘db‘: ‘python‘,  # 相当于自动USE
}
?
cnn = connect(**db_config)
cur = cnn.cursor()
?
sql_1 = ‘‘‘
CREATE TABLE `from_connector` (
  `id` int PRIMARY KEY auto_increment,
  `name` varchar(20) NOT NULL
)
‘‘‘
?
sql_2 = ‘‘‘
SHOW TABLES
‘‘‘
?
cur.execute(sql_1)
cur.execute(sql_2)
for i in cur:
    print(i)
    
cur.close()
cnn.close()

1、MySQL Python连接器的介绍
MySQL Python连接器主要为了给Python开发的程序来访问MySQL数据库,它遵守Python数据库API规范V2.0的标准来完成的(PEP 249),并且它采用纯Python代码编写,不依赖其它任何语言开发的组件,仅仅使用Python标准库提供的组件。


MySQL Python连接器提供下面的功能:
?提供了MySQL服务器所有的功能,包括5.7的版本。
?对Python和MySQL的数据类型进行相互转换,比如Python的datetime和MySQL的DATETIME类型转换。所有Python数据类型与MySQL数据库可以自动地进行转换。
?提供了MySQL扩展语法转换为标准的SQL语法。
?提供压缩协议,可以让客户端与服务器之间进行数据压缩传送。
?网络连接使用了TCP/IP socket通讯,当在Unix上时使用Unix socket通讯。
?提供安全socket通讯SSL。
?自定义连接驱动协议,不需要任何MySQL的库或者模块。


MySQL Connector/Python 2.0支持Python 2.6, 2.7, 3.3等后面的版本。
注意:由于Python不支持旧的MySQL服务器授权方式,所以不支持低于4.1的版本。


2、Python开发者的建议
下面这些建议主要针对Python开发者在开发MySQL应用程序时需要考虑一些问题,或者方式:
?为安全考虑,不要把连接或登录数据库的数据库名称、用户名、密码等内容放到你写的脚本里。可以使用Python里config.py模块来管理这些参数,让这些参数与你的脚本代码进行分离开来。
?Python脚本常常需要在内存里创建或者删除大量的数据结构,并且达到内存上限。因为MySQL常常需要处理大量多于数倍内存大小的数据,所以在存储空间和I/O的优化技术就显得特别重要。例如,在MySQL很多表里你常常地使用数字ID来作为字典的键,而不是使用字符串作为字典的键,这样可以让键的存储空间更少,并且有固定的长度。因此使用数据ID作为InnoDB表的主键就是非常重要了,因为这些主键还需要被用来作为二级索引的值。
?应用程序应该排除错误数据输入。
错误数据也许是偶尔发生的事情,比如超出范围或者不符格式的字符串。应用程序可以使用服务器端来检查唯一性和非空的约束,从而让错误数据不输入到数据库。在客户端应该使用异常处理技术来报告这些问题出来。
错误数据也许是故意的,比如SQL注入攻击。例如,输入的值也许包括引号、分号、%和_等通配符,或者一些引起SQL语句严重出错的值。有效地检查这些输入值,以便确保只希望输入的字符出现,其它特别的字符也许导致改变SQL语句的行为。因而不能对用户输入的字符不作任何检查,就直接连接到SQL语句字符串里。另外对接受一些程序的输入参数的SQL语句也需要作检查,因为这些程序也可能产生错误的数据。
?因为用SQL语句从数据库查询结果集可能非常大,需要使用合适的方法来遍历获取的结果集。当你知道结果集只返回一行时,可以使用fetchone()函数;当你知道结果集返回数行,并且在内存里保存完整时可以使用fetchall()函数;当你不知道结果集的大小时,需要使用fetchmany()函数,你可以持续地调用这个函数,直到它不再返回结果为止。
?在Python里已经有一些模块可以保存和读取数据到文件,比如使用pickle和cPickle库,如果你想把这些数据保存到MySQL数据库需要有下面一些特征才值得做:
数据太大,不能一次性地放到内存里。在MySQL可以采用查询语句来减少数据量,也可以分批获取回来处理,或者通过集合函数来处理多项的操作,还可以通过innodb_buffer_pool_size来限制每次取回来的结果。
数据太复杂,不能使用一个结构表示。可以把数据分成多个表,然后有用联合查询方式把多个表数据一起取回来。
数据更新频率,多个用户同时操作。也许更新只是一小部分的数据,如果每次更新所有数据,就是比较浪费的。可以使用SQL语句INSERT,UPDATE,DELETE来操作不同项目,减少数据更新范围。
?使用MySQL最大的好处就是你的应用程序不需重新修改和架构改变,就可以获取性能改善,只需要针对MYSQL进行性能调优即可。
---------------------
作者:caimouse
来源:CSDN
原文:https://blog.csdn.net/caimouse/article/details/51690884
版权声明:本文为博主原创文章,转载请附上博文链接!

 

connector for python

标签:应该   test   分离   size   扩展   ble   exe   can   不能   

原文地址:https://www.cnblogs.com/xasdh/p/10668094.html

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!