模块的安装和配置
本人用的是ubuntu系统下虚拟环境的python3,故要先进到虚拟环境再下载pymysql。先用workon查看虚拟环境叫什么?再进入用pip下载。
进入后输入命令行:pip3 install pymysql,如果提示需要升级pip版本,按照其指定命令输入即可。如果你用的是ubuntu下的python,就不需要进入虚拟环境就可以直接pip安装。
安装完成后,在cd到下图的指定文件下,使用sudo打开文件输入密码,最后修改指定部分。
将bind-address的127.0.0.1改为0.0.0.0,IP地址127.0.0.1是只有本地才能连接,0.0.0.0是所有的ip都能访问。
python操作MySQL
首先导包
import pymysql
再建立和数据库的连接,配置pymysql.connect连接数据库。mysql的端口号是3306.
con = pymysql.connect(
host = '127.0.0.1',
port = 3306,
user = 'wanglong',
password = '12580',
db = 'mydb', #数据库名
charset = 'utf8')
再定义游标,之后利用python操作数据库的语句都是基于这个游标。
cur = con.cursor()
利用execute执行MySQL语句
a = cur.execute('show tables')
print (a)
上面的结果是6,返回的表格的数目。进入数据库执行相应语句效果如下:
如果想输出上图的具体数据,就要用fetchone或fetchall来提取数据。
cur.execute('show tables')
d = cur.fetchone()
f = cur.fetchall()
print (d)
print (*f)#拆包
('choose',)
('col',) ('course',) ('stu',) ('stu_for',) ('test',)
可以发现,再取出所有数据时,其第一条数据并没有取出,原因是在取出所有数据前实行了取出一条数据的命令。
我还可以建一张新表,如下所示:
tb = '''
create table test(
id int primary key auto_increment,
name varchar(20)
)
'''
cur.execute(tb)
需要注意的是,当我们利用execute语句执行mysql的插入、删除、更新时,它会自定开启一个事务,故如果不提交这个事务而运行,底层数据不会有任何改变。提交事务有两种方法,一种是原始的mysql语句,一种是pymysql模块内的方法。
cur.exectue('commit')
con.commit()
最后要注意的是,在所有操作完成之后要先关闭游标,再关闭连接。
cur.close()
con.close()