设为首页 收藏本站
查看: 746|回复: 0

[经验分享] MySQL Python教程(2)

[复制链接]

尚未签到

发表于 2015-4-25 06:42:47 | 显示全部楼层 |阅读模式
  mysql官网关于python的API是最经典的学习材料,相信对于所有函数浏览一遍以后,Mysql数据库用起来一定得心应手。
  首先看一下Connector/Python API包含哪些类和模块。



Module mysql.connector
Class connection.MySQLConnection
Class cursor.MySQLCursor
Class cursor.MySQLCursorBuffered
Class cursor.MySQLCursorPrepared
Class constants.ClientFlag
Class constants.FieldType
Class constants.SQLMode
Class constants.CharacterSet
Class constants.RefreshOption
Errors and Exceptions
  
  一、mysql.connector模块



1 Constructor connection.MySQLConnection(**kwargs)
2 Method MySQLConnection.close()
3 Method MySQLConnection.config(**kwargs)
4 Method MySQLConnection.connect(**kwargs)
5 Method MySQLConnection.commit()
6 Method MySQLConnection.cursor(buffered=None, raw=None, cursor_class=None)
7 Method MySQLConnection.cmd_change_user(username='', password='', database='', charset=33)
8 Method MySQLConnection.cmd_debug()
9 Method MySQLConnection.cmd_init_db(database)
10 Method MySQLConnection.cmd_ping()
11 Method MySQLConnection.cmd_process_info()
12 Method MySQLConnection.cmd_process_kill(mysql_pid)
13 Method MySQLConnection.cmd_quit()
14 Method MySQLConnection.cmd_query(statement)
15 Method MySQLConnection.cmd_query_iter(statement)
16 Method MySQLConnection.cmd_refresh(options)
17 Method MySQLConnection.cmd_shutdown()
18 Method MySQLConnection.cmd_statistics()
19 Method MySQLConnection.disconnect()
20 Method MySQLConnection.get_rows(count=None)
21 Method MySQLConnection.get_row()
22 Method MySQLConnection.get_server_info()
23 Method MySQLConnection.get_server_version()
24 Method MySQLConnection.is_connected()
25 Method MySQLConnection.isset_client_flag(flag)
26 Method MySQLConnection.ping(attempts=1, delay=0)
27 Method MySQLConnection.reconnect(attempts=1, delay=0)
28 Method MySQLConnection.rollback()
29 Method MySQLConnection.set_charset_collation(charset=None, collation=None)
30 Method MySQLConnection.set_client_flags(flags)
31 Method MySQLConnection.start_transaction()
32 Property MySQLConnection.autocommit
33 Property MySQLConnection.charset_name
34 Property MySQLConnection.collation_name
35 Property MySQLConnection.connection_id
36 Property MySQLConnection.database
37 Property MySQLConnection.get_warnings
38 Property MySQLConnection.in_transaction
39 Property MySQLConnection.raise_on_warnings
40 Property MySQLConnection.server_host
41 Property MySQLConnection.server_port
42 Property MySQLConnection.sql_mode
43 Property MySQLConnection.time_zone
44 Property MySQLConnection.unix_socket
45 Property MySQLConnection.user
  
  mysql.connector提供顶层的方法和属性。具体函数如下:
  Method mysql.connector.connect()
  该方法用来连接MySQL服务器。如果没有提供任何参数,将使用默认配置。关于函数的参数列表,参见:
  建立连接的方法有两种:
  1、使用mysql.connector.connect()方法:
    cnx=mysql.connector.connect(user='joe',database='test')
  2、使用mysql.connector.MySQLConnection():
    cnx = MySQLConnection(user='joe', database='test')
  Property mysql.connector.apilevel
  这个属性是用来标示所支持的数据库API的等级(level)。
  >>> mysql.connector.apilevel
  '2.0'
Property mysql.connector.paramstyle
标示参数默认的样式
  >>> mysql.connector.paramstyle
  'pyformat'
  Property mysql.connector.threadsafety
标示支持的线程安全等级
>>> mysql.connector.threadsafety
1
  Property mysql.connector.__version__
Connector/Python的版本号
  Property mysql.connector.__version_info__
Connector/Python的版本信息
  二、类 connection.MySQLConnection
  包含以下方法和属性:
Constructor connection.MySQLConnection(**kwargs)
  Method MySQLConnection.close()
相当于类中disconnect()方法
  Method MySQLConnection.config(**kwargs)
对一个已经实例化的MySQLConnection对象进行配置。
  cnx = mysql.connector.connect(user='joe', database='test')
# Connected as 'joe'
cnx.config(user='jane')
cnx.reconnect()
# Now connected as 'jane'
  Method MySQLConnection.connect(**kwargs)
  Method MySQLConnection.commit()
在对数据库进行更改后调用此函数,使得改变立即生效。
>>> cursor.execute("INSERT INTO employees (first_name) VALUES (%s)", ('Jane'))
>>> cnx.commit()
  Method MySQLConnection.cursor(buffered=None, raw=None, cursor_class=None)
如果buffered为ture,在cursor中会获得SQL语句执行后的所有结果,如果raw设置为true,则跳过由MYSQL数据向python数据类型的转换,自己执行转换。
  返回的对象类型由buffered和raw参数决定:
If not buffered and not raw: cursor.MySQLCursor
If buffered and not raw: cursor.MySQLCursorBuffered
If buffered and raw: cursor.MySQLCursorBufferedRaw
If not buffered and raw: cursor.MySQLCursorRaw
Returns a CursorBase instance.
  Method MySQLConnection.cmd_change_user(username='', password='', database='', charset=33)
改变用户
  Method MySQLConnection.cmd_debug()
该方法需要root权限,可以将debug信息写入error log中。
  Method MySQLConnection.cmd_init_db(database)
制定默认的数据库
  Method MySQLConnection.cmd_ping()
  Method MySQLConnection.cmd_process_info()
use the SHOW PROCESSLIST statement or query the tables found in the database INFORMATION_SCHEMA.
  Method MySQLConnection.cmd_process_kill(mysql_pid)
关闭mysql进程。以下两种方法有同样的作用:
>>> cnx.cmd_process_kill(123)
>>> cnx.cmd_query('KILL 123')
  Method MySQLConnection.cmd_quit()
关闭连接
  Method MySQLConnection.cmd_query(statement)
发送statement语句到MYSQL服务器,并执行放回结果。如果想要执行多条statement,使用cmd_query_iter()
  Method MySQLConnection.cmd_query_iter(statement)
同cmd_query()方法
statement = 'SELECT 1; INSERT INTO t1 VALUES (); SELECT 2'
for result in cnx.cmd_query_iter(statement):
if 'columns' in result:
columns = result['columns']
rows = cnx.get_rows()
else:
# do something useful with INSERT result
Method MySQLConnection.cmd_refresh(options)
该方法清空缓存,并重设服务器信息。调用该方法的连接需要有RELOAD权限。
  Example:
  >>> from mysql.connector import RefreshOption
>>> refresh = RefreshOption.LOG | RefreshOption.THREADS
>>> cnx.cmd_refresh(refresh)
  Method MySQLConnection.cmd_shutdown()
Asks the database server to shut down. The connected user must have the SHUTDOWN privilege.
  Method MySQLConnection.cmd_statistics()
Returns a dictionary containing information about the MySQL server including uptime in seconds and the number of running threads, questions, reloads, and open tables.
  Method MySQLConnection.disconnect()
This method tries to send a QUIT command and close the socket. It raises no exceptions.
MySQLConnection.close() is a synonymous method name and more commonly used.
  Method MySQLConnection.get_rows(count=None)
该方法返回结果中的rows,如果count为None,则返回所有查询结果,否则返回指定数量的查询结果。
返回元组(tuple)的格式:
The row as a tuple containing byte objects, or None when no more rows are available.
EOF packet information as a dictionary containing status_flag and warning_count, or None when the row returned is not the last row.
  Method MySQLConnection.get_row()
返回结果为一个元组。
  Method MySQLConnection.get_server_info()
  Method MySQLConnection.get_server_version()
  Method MySQLConnection.is_connected()
测试连接是否可用。
  Method MySQLConnection.isset_client_flag(flag)
如果客户端设置了flag,返回true,否则返回false。
  Method MySQLConnection.ping(attempts=1, delay=0)
检测连接是否依旧可用。
当reconnect设置为true时,进行一次或者多次测试,使用delay设置重试的延迟时间。当连接不可用时,
抛出InterfaceError 错误,使用is_connected()方法可以测试连接并且不抛出异常错误。
  Method MySQLConnection.reconnect(attempts=1, delay=0)
当你预测是由于网络暂时不可用,导致连接失败时,使用此函数。attempts尝试次数应该多一些,间隔delay应该稍微长一些。
  Method MySQLConnection.rollback()
回滚当前transaction所进行的所有数据修改。
  >>> cursor.execute("INSERT INTO employees (first_name) VALUES (%s)", ('Jane'))
>>> cnx.rollback()
  Method MySQLConnection.set_charset_collation(charset=None, collation=None)
还是人家英文文档写得比较明白,为了避免误导,贴在下面了。
This method sets the character set and collation to be used for the current connection. The charset argument can be either the name of a character set, or the numerical equivalent as defined in constants.CharacterSet.
  When collation is None, the default collation for the character set is used.
  In the following example, we set the character set to latin1 and the collation to latin1_swedish_ci (the default collation for: latin1):
  >>> cnx = mysql.connector.connect(user='scott')
>>> cnx.set_charset('latin1')
Specify a given collation as follows:
  >>> cnx = mysql.connector.connect(user='scott')
>>> cnx.set_charset('latin1', 'latin1_general_ci')
  Method MySQLConnection.set_client_flags(flags)
设置客户端的flag,如果添加相应flag,则使用正数,否则使用负数。
  >>> from mysql.connector.constants import ClientFlag
>>> cnx.set_client_flags([ClientFlag.FOUND_ROWS, -ClientFlag.LONG_FLAG])
>>> cnx.reconnect()
  Method MySQLConnection.start_transaction()
该方法接受两个参数
  cnx.start_transaction(consistent_snapshot=bool,
isolation_level=level)
consistent_snapshot默认为false,标示是否使用连续快照;
isolation_level 默认值为None,该参数接受 'READ UNCOMMITTED', 'READ COMMITTED', 'REPEATABLE READ', and 'SERIALIZABLE'这些值.
为了测试transaction是否active,使用in_transaction属性。
  Property MySQLConnection.autocommit
该参数可以标示是否自动提交(This property can be assigned a value of True or False to enable or disable the autocommit feature of MySQL. )
  Property MySQLConnection.charset_name
字符集属性
  Property MySQLConnection.collation_name
  Property MySQLConnection.connection_id
连接的id,当没连接时为None
  Property MySQLConnection.database
检索或者设置当前数据库
>>> cnx.database = 'test'
>>> cnx.database = 'mysql'
>>> cnx.database
u'mysql'
  Property MySQLConnection.get_warnings
该属性标示SQL操作的结果中是否自动接受警告
>>> cnx.get_warnings = True
>>> cursor.execute('SELECT "a"+1')
>>> cursor.fetchall()
[(1.0,)]
>>> cursor.fetchwarnings()
[(u'Warning', 1292, u"Truncated incorrect DOUBLE value: 'a'")]
  Property MySQLConnection.in_transaction
标示transaction是否是激活状态
>>> cnx.start_transaction()
>>> cnx.in_transaction
True
>>> cnx.commit()
>>> cnx.in_transaction
False
  Property MySQLConnection.raise_on_warnings
标示警告情况下是否抛出异常
>>> cnx.raise_on_warnings = True
>>> cursor.execute('SELECT "a"+1')
>>> cursor.fetchall()
..
mysql.connector.errors.DataError: 1292: Truncated incorrect DOUBLE value: 'a'
  Property MySQLConnection.server_host
返回一个string类型值,代表连接MYSQL的主机名称或者IP地址
  Property MySQLConnection.server_port
返回连接TCP/IP的端口
  Property MySQLConnection.sql_mode
设置连接的所有模式
>>> cnx.sql_mode = 'TRADITIONAL,NO_ENGINE_SUBSTITUTION'
>>> cnx.sql_mode.split(',')
[u'STRICT_TRANS_TABLES', u'STRICT_ALL_TABLES', u'NO_ZERO_IN_DATE',
u'NO_ZERO_DATE', u'ERROR_FOR_DIVISION_BY_ZERO', u'TRADITIONAL',
u'NO_AUTO_CREATE_USER', u'NO_ENGINE_SUBSTITUTION']
>>> from mysql.connector.constants import SQLMode
>>> cnx.sql_mode = [ SQLMode.NO_ZERO_DATE, SQLMode.REAL_AS_FLOAT]
>>> cnx.sql_mode
  u'REAL_AS_FLOAT,NO_ZERO_DATE'
  Property MySQLConnection.time_zone
设置当前时区或者遍历当前连接所有可用的时区
>>> cnx.time_zone = '+00:00'
>>> cur.execute('SELECT NOW()') ; cur.fetchone()
(datetime.datetime(2012, 6, 15, 11, 24, 36),)
>>> cnx.time_zone = '-09:00'
>>> cur.execute('SELECT NOW()') ; cur.fetchone()
(datetime.datetime(2012, 6, 15, 2, 24, 44),)
>>> cnx.time_zone
u'-09:00'
  Property MySQLConnection.unix_socket
只读属性,返回用来连接Mysql的Unix socket文件
  Property MySQLConnection.user
返回连接服务器的用户姓名
  

运维网声明 1、欢迎大家加入本站运维交流群:群②:261659950 群⑤:202807635 群⑦870801961 群⑧679858003
2、本站所有主题由该帖子作者发表,该帖子作者与运维网享有帖子相关版权
3、所有作品的著作权均归原作者享有,请您和我们一样尊重他人的著作权等合法权益。如果您对作品感到满意,请购买正版
4、禁止制作、复制、发布和传播具有反动、淫秽、色情、暴力、凶杀等内容的信息,一经发现立即删除。若您因此触犯法律,一切后果自负,我们对此不承担任何责任
5、所有资源均系网友上传或者通过网络收集,我们仅提供一个展示、介绍、观摩学习的平台,我们不对其内容的准确性、可靠性、正当性、安全性、合法性等负责,亦不承担任何法律责任
6、所有作品仅供您个人学习、研究或欣赏,不得用于商业或者其他用途,否则,一切后果均由您自己承担,我们对此不承担任何法律责任
7、如涉及侵犯版权等问题,请您及时通知我们,我们将立即采取措施予以解决
8、联系人Email:admin@iyunv.com 网址:www.yunweiku.com

所有资源均系网友上传或者通过网络收集,我们仅提供一个展示、介绍、观摩学习的平台,我们不对其承担任何法律责任,如涉及侵犯版权等问题,请您及时通知我们,我们将立即处理,联系人Email:kefu@iyunv.com,QQ:1061981298 本贴地址:https://www.yunweiku.com/thread-60340-1-1.html 上篇帖子: 消息摘要算法示例(python和go) 下篇帖子: python版的Hello World
您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

扫码加入运维网微信交流群X

扫码加入运维网微信交流群

扫描二维码加入运维网微信交流群,最新一手资源尽在官方微信交流群!快快加入我们吧...

扫描微信二维码查看详情

客服E-mail:kefu@iyunv.com 客服QQ:1061981298


QQ群⑦:运维网交流群⑦ QQ群⑧:运维网交流群⑧ k8s群:运维网kubernetes交流群


提醒:禁止发布任何违反国家法律、法规的言论与图片等内容;本站内容均来自个人观点与网络等信息,非本站认同之观点.


本站大部分资源是网友从网上搜集分享而来,其版权均归原作者及其网站所有,我们尊重他人的合法权益,如有内容侵犯您的合法权益,请及时与我们联系进行核实删除!



合作伙伴: 青云cloud

快速回复 返回顶部 返回列表