connect mysql (4),mysql用法4

在python中连接mysql

一,pymysql的使用

首先在pycharm上装mysql

有三种方法

1.在文件setting那里查找pymysql 点+号 install 下载

2.创建一个py文件,然后导入import pymysql,此时会有红灯提示,点红灯第一个就是安装(install....)

3.在py文件控制台那里有个Terminal (它是装在系统的)

输入: pip install

import pymysql

def main():

# 1.建立连接

# host - 需要连接的数据库所在的主机地址(远程连接是ip地址(一般都用),本机使用localhost)

# user - 用户名

# password - 密码

# database - 数据库

# port - 端口

# charset - 编码方式

con_obj = pymysql.connect(host='39.105.169.15',

user='root',

password='root',

database='school',

port=3306,

charset='utf8',

autocommit=True)

print(con_obj)

# 2.获得游标对象 - 提供数据库操作的上下文 有了这部才能操作

# 注意:游标提供的上下文是事务环境 在创建时可以自动提交(autocommit=True)默认为False

with con_obj.cursor() as cursor:

# 在这儿后面操作数据库

# 3.操作数据库,执行sql语句: 连接对象.execute(sql语句) 里面是字符串

# 返回执行结果,这个sql操作影响的行(有错的话result那句就会崩溃)

try:

result = cursor.execute("update tb_teacher set teaage=25;")

print(result)

except:

print('操作失败')

finally:

# 关闭连接:连接对象.close()

con_obj.close()

# 事务提交

# con_obj.commit() 前面con_obj已经加了autocommit=True 自动提交

# 关闭连接:连接对象 操作就在他们之间写

# con_obj.close()

if __name__ == '__main__':

main()

二,数据的增删改查

import pymysql

def main():

# 1.建立连接

connect_obj = pymysql.connect('39.105.169.15',

'root',

'root',

'school',

3306,

charset='utf8',

autocommit=True)

# 2.获取游标

with connect_obj.cursor() as cursor_obj:

# 1)创建数据库

basa_name = input('需要创建的数据的名字(必须是英文):')

sqlstr = "creat database if not exists %s;" % base_name

result = cursor_obj.execute(sqlstr)

print(result)

# 2)删除数据库

# basa_name = input('需要创建的数据的名字(必须是英文):')

# cursor_obj.execute('drop database if exists %s;' % base_name)

# 3)使用数据库

# cursor_obj.execute('use python1;')

# 4)创建表

# cursor_obj.execute("""

# create table if not exists tb_person

# (

# pid int not null,

# pname varchar(20) not null,

# page int default 0,

# gender bit default 1,

# primary key(pid)

# );

# """)

# 5)删除表

# cursor_obj.execute('dorp table if exists tb_person;')

# 6)增删改

cursor_obj.executemany("""

insert into tb_person

(pid,name,page,gender)

values

(1,'张三',28,1),

(2,'小李',20,0);

""")

cursor_obj.execute('delete from tb_person where pid=4;')

cursor_obj.execute('update tb_person set pname="小明" where pname like "%三%";')

# 7)查:通过游标对象执行查询语句后,查询结果是保存在游标对象中

result = cursor_obj.execute('select * from tb_person;')

print(result)

# 游标对象.fetchall() - 获取查询结果,

# 结果是个元祖,元祖中的元素是一个小元祖代表的是每一条记录;小元祖中

#的元素是每一条记录中每个字段对应的值

# print(cursor_obj.fetchall())

# 这相当于一个生成式,取一个少一个,可以用变量保存来取值

all_person = cursor_obj.fetchall() # 用变量保存 此时是元祖

for p in all_person:

print('姓名:',p[0])

print('id:',p[1])

print('年龄:',p[2])

print(cursor_obj.fetchall()) # NONE 因为值已经被all_person赋予了

print(cursor_obj.fetchall()) # ()

# 关闭连接

# connect_obj.close()

if __name__ == '__main__':

main()

三,对象存储

import pymysql

class Student:

def __init__(self, name, age=0, gender=1, addr='', tel=''):

self.name = name

self.age = age

self.gender = gender

self.addr = addr

self.tel = tel

class Dog:

def __init__(self, name, color):

self.name = name

self.color = color

all_student = [

Student('小明', 20, 1, '四川成都', '18723674034'),

Student('罗浩', 30, 1, '四川德阳', '13723632333'),

Student('王海飞', 25, 1, '重庆', '18764344034'),

Student('苏玲', 22, 0, '湖南长沙', '13443445455')

]

# 将数据保存到数据库,通过函数封装

# 插入对象的时候按照对象的类型自动选择表,如果对应的表不存在就自动创建表

# 表的规则: Student类的对象 tb_Student表 Dog类对象 tb_Dog表中

def insert_object_database(obj, cursor):

# 1.获取对象对应的类型名

class_name = obj.__class__.__name__

table_name = 'tb_'+class_name

# 获取所有的字段,以逗号隔开

keys = ','.join(obj.__dict__.keys())

# 获取所有的值,以逗号隔开

values = ''

for item in obj.__dict__.values():

if isinstance(item, str):

values += "'%s'" % item

else:

values += str(item)

values += ','

values = values[:-1]

# 2. 插入数据 (%sid, %s)-插入对象(取出字段)

# insert into 表名 (字段1,字段2,字段3,...) values (值1,值2,值3,...)

insert_sql = '''insert into %s

(%sid, %s)

values

(null,%s);

''' % (table_name, table_name[3:6], keys, values)

try:

cursor.execute(insert_sql)

except pymysql.err.ProgrammingError:

filed = '' # 字段1 字段类型1, 字段2 字段类型2, ...

for key in obj.__dict__:

filed += key + ''

value = obj.__dict__[key]

if isinstance(value, str):

filed += ' text'

else:

filed += ' float'

filed += ','

filed = filed[:-1]

# 创建再插入

create_sql = "create table if not exists %s

(%sid int not null auto_increment, %s, primary key(%sid));" % (

table_name, table_name[3:6], filed, table_name[3:6])

cursor.execute(create_sql)

def main():

connect_obj = pymysql.connect(

host='39.105.169.15',

user='root',

password='root',

charset='utf8',

autocommit=True,

port=3306)

# 获取游标

# cursor(游标类型) - 游标类型默认是None,表示查询的时候结果是以元祖的形式返回;

# pymysql.cursor.DictCursor,表示查询的时候结果是以字典的形式返回

with connect_obj.cursor(pymysql.cursors.DictCursor) as cursor_obj:

# 创建数据库

# cursor_obj.execute('create database if not exists python2 default charset utf8;')

# 使用库

cursor_obj.execute('use python2;')

# 创建表存学生信息

# cursor_obj.execute('''

# create table if not exists t_student(

# stuid int not null auto_increment,

# name varchar(20),

# age int,

# gender bit,

# addr text,

# tel char(11),

# primary key(stuid)

# )

# ''')

# 插入数据

# for stu in all_student:

# inser_object_database(stu, cursor_obj)

# 一个一个的获取

# sql = '''insert into t_student(name,age,gander,addr,tel)

# values

# ("%s", %d, %d, "%s", "%s");''' % (stu.name, stu.age, stu.gender, stu.addr, stu.tel)

# cursor_obj.execute(sql)

# insert_object_database(Dog('大黄', '黄色'), cursor_obj)

# 获取数据

cursor_obj.execute('select * from tb_student;')

re = cursor_obj.fetchall()

for studict in re:

print(studict)

del_key = 'Stuid'

del studict[del_key]

stu = Student(**studict) # Student(Stuid=1,name='小明',age=20,gender=1,addr=...)

print(stu)

# 关闭连接

connect_obj.close()

if __name__ == '__main__':

main()

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值