目录
1)创建数据库 cursor.execute(createdb_sql)
2)创建表 cursor.execute(create_table_sql)
3)插入单条数据 cursor.execute(sql,args)
4)批量插入多条数据 cursor.executemany(sql,args)
5、查询数据 cursor.fetchone()、fetchmany、fetchall
1>> 获取游标所在处的一行数据 cursor.fetchone()
2>> 接收size行返回结果行 cursor.fetchmany(size)
3>> 接收全部的返回结果行 cursor.fetchall()
1)更新一条数据 cursor.execute(update_sql)
1)删除单条数据 cursor.execute(delete_sql, (70, "tom1"))
MySQL数据库
- python3 与MySQL 进行交互编程,需要安装 pymysql 库:pip install --user pymysql
1、操作mysql数据库流程
- 引用API模块;
- 获取与数据库的连接;
- 执行sql语句,或存储过程;
- 关闭数据库连接。
2、连接数据库函数 pymysql.connect()
import pymysql
# 打开数据库连接
conn = pymysql.connect('192.168.171.131', user='root', passwd='root', db='pydb', charset='utf8')
print(conn)
print(type(conn))
print(dir(conn))
输出结果:
<pymysql.connections.Connection object at 0x000002ABBD4608E0>
<class 'pymysql.connections.Connection'>
['DataError', 'DatabaseError', 'Error', 'IntegrityError', 'InterfaceError', 'InternalError', 'NotSupportedError', 'OperationalError', 'ProgrammingError', 'Warning', '__class__', '__del__', '__delattr__', '__dict__', '__dir__', '__doc__', '__eq__', '__format__', '__ge__', '__getattribute__', '__gt__', '__hash__', '__init__', '__init_subclass__', '__le__', '__lt__', '__module__', '__ne__', '__new__', '__reduce__', '__reduce_ex__', '__repr__', '__setattr__', '__sizeof__', '__str__', '__subclasshook__', '__weakref__', '_affected_rows', '_auth_plugin_map', '_auth_plugin_name', '_binary_prefix', '_closed', '_connect_attrs', '_create_ssl_ctx', '_execute_command', '_force_close', '_get_auth_plugin_handler', '_get_server_information', '_local_infile', '_next_seq_id', '_process_auth', '_quote_bytes', '_read_bytes', '_read_ok_packet', '_read_packet', '_read_query_result', '_read_timeout', '_request_authentication', '_result', '_rfile', '_secure', '_send_autocommit_mode', '_sock', '_write_bytes', '_write_timeout', 'affected_rows', 'autocommit', 'autocommit_mode', 'begin', 'bind_address', 'character_set_name', 'charset', 'client_flag', 'close', 'commit', 'connect', 'connect_timeout', 'cursor', 'cursorclass', 'db', 'decoders', 'encoders', 'encoding', 'escape', 'escape_string', 'get_autocommit', 'get_host_info', 'get_proto_info', 'get_server_info', 'host', 'host_info', 'init_command', 'insert_id', 'kill', 'literal', 'max_allowed_packet', 'next_result', 'open', 'password', 'ping', 'port', 'protocol_version', 'query', 'rollback', 'salt', 'select_db', 'server_capabilities', 'server_charset', 'server_language', 'server_public_key', 'server_status', 'server_thread_id', 'server_version', 'set_charset', 'show_warnings', 'sql_mode', 'ssl', 'thread_id', 'unix_socket', 'use_unicode', 'user', 'write_packet']
问题:如果执行报错,“pymysql.err.OperationalError: (1049, "Unknown database 'pydb'")”,可能原因分析:
1)数据库连接写的不对(如,我的数据库是搭建在VM虚机中的,就不能写localhost,或127.0.0.1,要写虚机的ip地址)
2)数据库db不存在(如,使用Navicat for MySQL创建的是新连接,不是新的数据库)
3、获取游标 conn.cursor()
- 数据库连接后,要获取游标,使用游标来操作数据库;
- 创建游标实例对象:cursor = conn.cursor()
import pymysql
# 打开数据库连接
conn = pymysql.connect('192.168.171.131', user='root', passwd='root', db='pydb', charset='utf8')
# 创建游标对象cursor
cursor = conn.cursor()
print(cursor)
print(type(cursor))
print(dir(cursor))
输出结果:
<pymysql.cursors.Cursor object at 0x0000020F25DA0340>
<class 'pymysql.cursors.Cursor'>
['DataError', 'DatabaseError', 'Error', 'IntegrityError', 'InterfaceError', 'InternalError', 'NotSupportedError', 'OperationalError', 'ProgrammingError', 'Warning', '__class__', '__delattr__', '__dict__', '__dir__', '__doc__', '__enter__', '__eq__', '__exit__', '__format__', '__ge__', '__getattribute__', '__gt__', '__hash__', '__init__', '__init_subclass__', '__iter__', '__le__', '__lt__', '__module__', '__ne__', '__new__', '__reduce__', '__reduce_ex__', '__repr__', '__setattr__', '__sizeof__', '__str__', '__subclasshook__', '__weakref__', '_check_executed', '_clear_result', '_conv_row', '_do_execute_many', '_do_get_result', '_ensure_bytes', '_escape_args', '_executed', '_get_db', '_nextset', '_query', '_result', '_rows', 'arraysize', 'callproc', 'close', 'connection', 'description', 'execute', 'executemany', 'fetchall', 'fetchmany', 'fetchone', 'max_stmt_length', 'mogrify', 'nextset', 'rowcount', 'rownumber', 'scroll', 'setinputsizes', 'setoutputsizes']
4、执行sql语句 execute和executemany
execute
- execute(query,args=None)
- 函数作用:执行单条的sql语句,执行成功后返回受影响的行数
- 参数说明:
query:要执行的sql语句,字符串类型
args:可选的序列或映射,用于query的参数值。如果args为序列,query中必须使用%s做占位符;如果args为映射,query中必须使用%(key)s做占位符
executemany
- executemany(query,args=None)