Python操作MySQL
设置MySQL
在Linux上,需要编辑MySQL的配置文件,把数据库默认的编码全部改为UTF-8。MySQL的配置文件默认存放在/etc/my.cnf或者/etc/mysql/my.cnf:
[client] default-character-set = utf8 [mysqld] default-storage-engine = INNODB character-set-server = utf8 collation-server = utf8_general_ci
重启MySQL后,可以通过MySQL的客户端命令行检查编码:
$ mysql -u root -p Enter password: Welcome to the MySQL monitor... ... mysql> show variables like '%char%'; +--------------------------+--------------------------------------------------------+ | Variable_name | Value | +--------------------------+--------------------------------------------------------+ | character_set_client | utf8 | | character_set_connection | utf8 | | character_set_database | utf8 | | character_set_filesystem | binary | | character_set_results | utf8 | | character_set_server | utf8 | | character_set_system | utf8 | | character_sets_dir | /usr/local/mysql-5.1.65-osx10.6-x86_64/share/charsets/ | +--------------------------+--------------------------------------------------------+ 8 rows in set (0.00 sec)
看到utf8字样就表示编码设置正确。另一种设置方法如下
set character_set_server=utf8 #重启会失效
注:如果MySQL的版本≥5.5.3,可以把编码设置为utf8mb4,utf8mb4和utf8完全兼容,但它支持最新的Unicode标准,可以显示emoji字符。
安装MySQL驱动
由于MySQL服务器以独立的进程运行,并通过网络对外服务,所以,需要支持Python的MySQL驱动来连接到MySQL服务器。MySQL官方提供了mysql-connector-python驱动,但是安装的时候需要给pip命令加上参数--allow-external:
$ pip3 install mysql-connector-python --allow-external mysql-connector-python
如果上面的命令安装失败,可以试试另一个驱动:
$ pip install mysql-connector
例子
我们演示如何连接到MySQL服务器的test数据库:
#!/usr/bin/env python # -*- coding: utf-8 -*- """ mysql驱动 pip install mysql-connector 如果MySQL的版本≥5.5.3,可以把编码设置为utf8mb4 utf8mb4和utf8完全兼容,但它支持最新的Unicode标准,可以显示emoji字符。 """ # 导入MySQL驱动 import mysql.connector # 连接数据库,名称为mysql的名称,安装时已经设置 conn=mysql.connector.connect(host='192.168.1.164',user='root',password='123456',database='test') cursor=conn.cursor() # 建表 #cursor.execute('create table user1 (id varchar(20) primary key,name varchar(20))') # 添加数据 for x in range(2,4): # MySQL的SQL占位符是%s cursor.execute('insert into user (id,name) values (%s,%s)',[x,'jiang'+str(x)]) cursor.rowcount #执行INSERT等操作后要调用commit()提交事务; conn.commit() cursor.close() #查询 cursor=conn.cursor() cursor.execute("select * from user") values=cursor.fetchall() print(values) cursor.close() conn.close
查询结果以列表形式返回
[('1', 'Michael'), ('2', 'jiang2'), ('3', 'jiang3')]