python系列之(5)PyMySQL的使用
简介
PyMySQL是在 Python3.x 版本中用于连接 MySQL 服务器的一个库,Python2中是使用mysqldb。
安装
pip3 install pymysql
创建连接
#!/usr/bin/python3 import pymysql # 打开数据库连接 db = pymysql.connect("localhost","root","password","test" ) # 使用 cursor() 方法创建一个游标对象 cursor cursor = db.cursor() # 使用 execute() 方法执行 SQL,如果表存在则删除 cursor.execute("DROP TABLE IF EXISTS EMPLOYEE") # 使用预处理语句创建表 sql = """CREATE TABLE EMPLOYEE ( FIRST_NAME CHAR(20) NOT NULL, LAST_NAME CHAR(20), AGE INT, SEX CHAR(1), INCOME FLOAT )""" cursor.execute(sql) # 关闭数据库连接 db.close()
增
#!/usr/bin/python3 import pymysql # 打开数据库连接 db = pymysql.connect("localhost","root","password","test" ) # 使用 cursor() 方法创建一个游标对象 cursor cursor = db.cursor() # 使用预处理语句创建表 sql = """insert into employee(first_name, last_name, age, sex, income) values('sophie', 'Manche', 25, 'F', 3000)""" try: cursor.execute(sql) db.commit() except: db.rollback() # 关闭数据库连接 db.close()
删
#!/usr/bin/python3 import pymysql # 打开数据库连接 db = pymysql.connect("localhost","root","password","test" ) # 使用 cursor() 方法创建一个游标对象 cursor cursor = db.cursor() # 使用预处理语句创建表 sql = "delete from employee where age > %s" % (21) try: cursor.execute(sql) db.commit() except: db.rollback() # 关闭数据库连接 db.close()
改
#!/usr/bin/python3 import pymysql # 打开数据库连接 db = pymysql.connect("localhost","root","password","test" ) # 使用 cursor() 方法创建一个游标对象 cursor cursor = db.cursor() # 使用预处理语句创建表 sql = "update employee set age=age+1 where sex='%c'" % ('M') try: cursor.execute(sql) db.commit() except: db.rollback() # 关闭数据库连接 db.close()
查
#!/usr/bin/python3 import pymysql # 打开数据库连接 db = pymysql.connect("localhost","root","password","test") # 使用 cursor() 方法创建一个游标对象 cursor cursor = db.cursor() # 使用预处理语句创建表 sql = "select * from employee \ where income > %s" % (1000) try: cursor.execute(sql) results = cursor.fetchall() for row in results: fname = row[0] lname = row[1] age = row[2] sex = row[3] income = row[4] print("fname=%s,lname=%s,age=%s,sex=%s,income=%s" % \ (fname, lname, age, sex, income)) except: print("Error:unable to fetch data") # 关闭数据库连接 db.close()
初始化函数详解
def __init__(self, host=None, user=None, password="", database=None, port=0, unix_socket=None, charset='', sql_mode=None, read_default_file=None, conv=None, use_unicode=None, client_flag=0, cursorclass=Cursor, init_command=None, connect_timeout=10, ssl=None, read_default_group=None, compress=None, named_pipe=None, no_delay=None, autocommit=False, db=None, passwd=None, local_infile=False, max_allowed_packet=16*1024*1024, defer_connect=False, auth_plugin_map={}, read_timeout=None, write_timeout=None, bind_address=None): 参数解释: host: Host where the database server is located #主机名或者主机地址 user: Username to log in as #用户名 password: Password to use. #密码 database: Database to use, None to not use a particular one. #指定的数据库 port: MySQL port to use, default is usually OK. (default: 3306) #端口,默认是3306 bind_address: When the client has multiple network interfaces, specify the interface from which to connect to the host. Argument can be a hostname or an IP address. #当客户端有多个网络接口的时候,指点连接到数据库的接口,可以是一个主机名或者ip地址 unix_socket: Optionally, you can use a unix socket rather than TCP/IP. charset: Charset you want to use. #指定字符编码 sql_mode: Default SQL_MODE to use. read_default_file: Specifies my.cnf file to read these parameters from under the [client] section. conv: Conversion dictionary to use instead of the default one. This is used to provide custom marshalling and unmarshaling of types. See converters. use_unicode: Whether or not to default to unicode strings. This option defaults to true for Py3k. client_flag: Custom flags to send to MySQL. Find potential values in constants.CLIENT. cursorclass: Custom cursor class to use. init_command: Initial SQL statement to run when connection is established. connect_timeout: Timeout before throwing an exception when connecting. (default: 10, min: 1, max: 31536000) ssl: A dict of arguments similar to mysql_ssl_set()'s parameters. For now the capath and cipher arguments are not supported. read_default_group: Group to read from in the configuration file. compress; Not supported named_pipe: Not supported autocommit: Autocommit mode. None means use server default. (default: False) local_infile: Boolean to enable the use of LOAD DATA LOCAL command. (default: False) max_allowed_packet: Max size of packet sent to server in bytes. (default: 16MB) Only used to limit size of "LOAD LOCAL INFILE" data packet smaller than default (16KB). defer_connect: Don't explicitly connect on contruction - wait for connect call. (default: False) auth_plugin_map: A dict of plugin names to a class that processes that plugin. The class will take the Connection object as the argument to the constructor. The class needs an authenticate method taking an authentication packet as an argument. For the dialog plugin, a prompt(echo, prompt) method can be used (if no authenticate method) for returning a string from the user. (experimental) db: Alias for database. (for compatibility to MySQLdb) passwd: Alias for password. (for compatibility to MySQLdb)
cursor 函数详解
class Cursor(object): """ This is the object you use to interact with the database. """ def close(self): """ Closing a cursor just exhausts all remaining data. """ def setinputsizes(self, *args): """Does nothing, required by DB API.""" def setoutputsizes(self, *args): """Does nothing, required by DB API.""" def execute(self, query, args=None): """Execute a query :param str query: Query to execute. :param args: parameters used with query. (optional) :type args: tuple, list or dict :return: Number of affected rows :rtype: int If args is a list or tuple, %s can be used as a placeholder in the query. If args is a dict, %(name)s can be used as a placeholder in the query. """ def executemany(self, query, args): # type: (str, list) -> int """Run several data against one query :param query: query to execute on server :param args: Sequence of sequences or mappings. It is used as parameter. :return: Number of rows affected, if any. This method improves performance on multiple-row INSERT and REPLACE. Otherwise it is equivalent to looping over args with execute(). """ def fetchone(self): """Fetch the next row""" def fetchmany(self, size=None): """Fetch several rows""" def fetchall(self): """Fetch all the rows""" ......