mysql用法4

2019-02-28  本文已影响0人  遥远的她197

在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()
上一篇 下一篇

猜你喜欢

热点阅读