基本操作:
登陆:mysql -uroot -h127.0.0.1 -P3306 -p
mysql -uroot -p(本机不用写host)
退出mysql:ctrl+z+回车,或者exit
端口号默认是3306,但是可以通过安装目录下的配置文件修改。
#安装pymysql
pip3 install pymysql
#连接数据库
import pymysql #打开数据库连接 conn = pymysql.connect('localhost',user = "root",passwd = "123456",db = "testdb") #db = pymysql.connect(host='127.0.0.1', port=3306, user='root', passwd='1234', db='testdb', charset='utf8') print (conn) print (type(conn))
#创建数据库
import pymysql #打开数据库连接,不需要指定数据库,因为需要创建数据库 conn = pymysql.connect('localhost',user = "root",passwd = "123456") #获取游标 cursor=conn.cursor() #创建pythonBD数据库 cursor.execute('CREATE DATABASE IF NOT EXISTS pythonDB DEFAULT CHARSET utf8 COLLATE utf8_general_ci;') cursor.close()#先关闭游标 conn.close()#再关闭数据库连接 print('创建pythonBD数据库成功')
#创建表
import pymysql #打开数据库连接 conn = pymysql.connect('localhost',user = "root",passwd = "123456",db = "testdb") #获取游标 cursor=conn.cursor() print(cursor) #创建user表 cursor.execute('drop table if exists user') sql="""CREATE TABLE IF NOT EXISTS `user` ( `id` int(11) NOT NULL AUTO_INCREMENT, `name` varchar(255) NOT NULL, `age` int(11) NOT NULL, PRIMARY KEY (`id`) ) ENGINE=InnoDB DEFAULT CHARSET=utf8 AUTO_INCREMENT=0""" cursor.execute(sql) cursor.close()#先关闭游标 conn.close()#再关闭数据库连接 print('创建数据表成功')
#插入单条数据
import pymysql #打开数据库连接,不指定数据库 conn=pymysql.connect('localhost','root','123456') conn.select_db('pythondb') cur=conn.cursor()#获取游标 #创建user表 cur.execute('drop table if exists user') sql="""CREATE TABLE IF NOT EXISTS `user` ( `id` int(11) NOT NULL AUTO_INCREMENT, `name` varchar(255) NOT NULL, `age` int(11) NOT NULL, PRIMARY KEY (`id`) ) ENGINE=InnoDB DEFAULT CHARSET=utf8 AUTO_INCREMENT=0""" cur.execute(sql) insert=cur.execute("insert into user values(1,'tom',18)") print('添加语句受影响的行数:',insert) #另一种插入数据的方式,通过字符串传入值 sql="insert into user values(%s,%s,%s)" cur.execute(sql,(3,'kongsh',20)) cur.close() conn.commit() conn.close() print('sql执行成功')
批量插入多条数据
import pymysql #打开数据库连接,不指定数据库 conn=pymysql.connect('localhost','root','123456') conn.select_db('pythondb') #获取游标 cur=conn.cursor() #另一种插入数据的方式,通过字符串传入值 sql="insert into user values(%s,%s,%s)" insert=cur.executemany(sql,[(4,'wen',20),(5,'tom',10),(6,'test',30)]) print ('批量插入返回受影响的行数:',insert) cur.close() conn.commit() conn.close() print('sql执行成功')
查询数据
import pymysql #打开数据库连接 conn=pymysql.connect('localhost','root','123456') conn.select_db('pythondb') #获取游标 cur=conn.cursor() cur.execute("select * from user;") while 1: res=cur.fetchone() if res is None: #表示已经取完结果集 break print (res) cur.close() conn.commit() conn.close() print('sql执行成功')
fetchmany
import pymysql #打开数据库连接 conn=pymysql.connect(‘localhost’,‘root’,‘123456’) conn.select_db(‘pythondb’) #获取游标 cur=conn.cursor() cur.execute(“select * from user”) #取3条数据 resTuple=cur.fetchmany(3) print(type(resTuple)) for res in resTuple: print (res) cur.close() conn.commit() conn.close() print(‘sql执行成功’)
fetchall
import pymysql #打开数据库连接 conn=pymysql.connect(‘localhost’,‘root’,‘123456’) conn.select_db(‘pythondb’) #获取游标 cur=conn.cursor() cur.execute(“select * from user”) #取所有数据 resTuple=cur.fetchall() print(type(resTuple)) print (‘共%d条数据’%len(resTuple)) cur.close() conn.commit() conn.close() print(‘sql执行成功’)
更新数据
import pymysql #打开数据库连接 conn=pymysql.connect('localhost','root','123456') conn.select_db('pythondb') #获取游标 cur=conn.cursor() #更新一条数据 update=cur.execute("update user set age=100 where name='kongsh'") print('修改后受影响的行数为:',update) #查询一条数据 cur.execute(select * from user where name="kongsh";') print(cur.fetchone()) cur.close() conn.commit() conn.close() print('sql执行成功')
更新多条数据
import pymysql #打开数据库连接 conn=pymysql.connect('localhost','root','123456') conn.select_db('pythondb') #获取游标 cur=conn.cursor() #更新前查询所有数据 cur.execute("select * from user where name in ('kongsh','wen');") print('更新前的数据为:') for res in cur.fetchall(): print (res) print ('*'*40) #更新2条数据 sql="update user set age=%s where name=%s" update=cur.executemany(sql,[(15,'kongsh'),(18,'wen')]) #更新2条数据后查询所有数据 cur.execute("select * from user where name in ('kongsh','wen');") print('更新后的数据为:') for res in cur.fetchall(): print (res) cur.close() conn.commit() conn.close() print('sql执行成功')
删除数据
import pymysql #打开数据库连接 conn=pymysql.connect('localhost','root','123456') conn.select_db('pythondb') #获取游标 cur=conn.cursor() #删除前查询所有数据 cur.execute("select * from user;") print('删除前的数据为:') for res in cur.fetchall(): print (res) print ('*'*40) #删除1条数据 cur.execute("delete from user where id=1") #删除后查询所有数据 cur.execute("select * from user;") print('删除后的数据为:') for res in cur.fetchall(): print (res) cur.close() conn.commit() conn.close() print('sql执行成功')
删除多条数据
import pymysql #打开数据库连接 conn=pymysql.connect('localhost','root','123456') conn.select_db('pythondb') #获取游标 cur=conn.cursor() #删除前查询所有数据 cur.execute("select * from user;") print('删除前的数据为:') for res in cur.fetchall(): print (res) print ('*'*40) #删除2条数据 sql="delete from user where id=%s" cur.executemany(sql,[(3),(4)]) #删除后查询所有数据 cur.execute("select * from user;") print('删除后的数据为:') for res in cur.fetchall(): print(res) cur.close() conn.commit() conn.close() print('sql执行成功')
事务回滚
import pymysql #打开数据库连接 conn=pymysql.connect('localhost','root','123456') conn.select_db('pythondb') #获取游标 cur=conn.cursor() #修改前查询所有数据 cur.execute("select * from user;") print('修改前的数据为:') for res in cur.fetchall(): print (res) print ('*'*40) #更新表中第1条数据 cur.execute("update user set name='xiaoxiaoxiaoxiaoren' where id=5") #修改后查询所有数据 cur.execute("select * from user;") print('修改后的数据为:') for res in cur.fetchall(): print(res) print ('*'*40) #回滚事务 conn.rollback() cur.execute("select * from user;") print('回滚事务后的数据为:') for res in cur.fetchall(): print (res) cur.close() conn.commit() conn.close() print('sql执行成功')
插入100条数据到数据库
import pymysql import string,random #打开数据库连接 conn=pymysql.connect('localhost','root','123456') conn.select_db('testdb') #获取游标 cur=conn.cursor() #创建user表 cur.execute('drop table if exists user') sql="""CREATE TABLE IF NOT EXISTS `user` ( `id` int(11) NOT NULL AUTO_INCREMENT, `name` varchar(255) NOT NULL, `age` int(11) NOT NULL, PRIMARY KEY (`id`) ) ENGINE=InnoDB DEFAULT CHARSET=utf8 AUTO_INCREMENT=0""" cur.execute(sql) #修改前查询所有数据 cur.execute("select * from user;") print('修改前的数据为:') for res in cur.fetchall(): print(res) print ('*'*40) #循环插入数据 words=list(string.ascii_letters) sql="insert into user values(%s,%s,%s)" for i in range(100): random.shuffle(words)#打乱顺序 cur.execute(sql,(i+1,"".join(words[:5]),random.randint(0,80))) #插入100条后查询所有数据 cur.execute("select * from user;") print('修改后的数据为:') for res in cur.fetchall(): print (res) print ('*'*40) cur.close() conn.commit() conn.close() print('sql执行成功')
一次插入多条
import pymysql import string,random #打开数据库连接 conn=pymysql.connect('localhost','root','123456') conn.select_db('testdb') #获取游标 cur=conn.cursor() #创建user表 cur.execute('drop table if exists user') sql="""CREATE TABLE IF NOT EXISTS `user` ( `id` int(11) NOT NULL AUTO_INCREMENT, `name` varchar(255) NOT NULL, `age` int(11) NOT NULL, PRIMARY KEY (`id`) ) ENGINE=InnoDB DEFAULT CHARSET=utf8 AUTO_INCREMENT=0""" cur.execute(sql) #修改前查询所有数据 cur.execute("select * from user;") print('修改前的数据为:') for res in cur.fetchall(): print (res) print ('*'*40) #循环插入数据 words=list(string.ascii_letters) sql="insert into user values(%s,%s,%s)" random.shuffle(words)#打乱顺序 cur.executemany(sql,[(i+1,"".join(words[:5]),random.randint(0,80)) for i in range(100) ]) #插入100条后查询所有数据 cur.execute("select * from user;") print('修改后的数据为:') for res in cur.fetchall(): print (res) print ('*'*40) cur.close() conn.commit() conn.close() print('sql执行成功')