美文网首页mysql我的Python自学之路
用python对Mysql做坏坏的事:联接与新建

用python对Mysql做坏坏的事:联接与新建

作者: 三层肚腩君 | 来源:发表于2017-03-01 11:52 被阅读25次

    使用的是支持3.0以上mysql.connector模块。因为这货是安装Mysql时自带的,不用满世界去找。官方手册在:https://dev.mysql.com/doc/connector-python/en/connector-python-example-ddl.html
    本笔记是对是官方手册的瞎鸡儿理解,正文在注释中

    使用方法

    链接数据库

    官方介绍了三种链接方法。本着人之初,性本懒的特性,就学最后一种吧。

    import mysql.connector
    
    config={'host':'127.0.0.1',#默认127.0.0.1
            'user':'root',
            'password':'password',
            'port':3306 ,#默认即为3306
            'database':'test1',#这里似乎是选择数据库。后面有类似的操作,可以删掉。
            'charset':'utf8'#默认即为utf8,说是为了更好的处理中文,也许吧。
            }  #默认值就是安装的时候,一路下一步,没有瞎鸡吧乱设置。
    #下面就厉害了,用了python异常处理的语句。感觉一下了就高端了几个级数。哈哈
    #这玩意执行try语句的内容,不成就把错误返回到python客户端。不用的话,好像就报错而已。
    #就当是作文模版,随时用用,也不是什么坏事。
    try:
      cnn=mysql.connector.connect(**config)
      cursor = cnn.cursor()  #这句话是很重要的,获取光标。有了它才能进行操作。
      print('Yeah!you connceted!')
    except mysql.connector.Error as e:
      print('connect fails!{}'.format(e))  
    #这里是Python中格式化输出的内容。一直有%的方法,没什么地方要用这个东西。
    
    

    手册里还有这么一句:

    If you have lots of connection arguments, it's best to keep them in a dictionary and use the ** operator

    大概就是可以用在多个链接请求时吧。摊手。

    创建表单

    之前看网上的都是只能一次创一个,看了官方手册才知道创建多个也不是多难的事。

    tables = {}    #先建一个空字典,再把一个一个表单向里塞。
    #但是为什么在Python中就不用;来结束语句呀。每句的双引号又是什么鬼呀。diao大的萌妹给说声。
    tables['employees'] = (        
        "create table `employees` ("
        "  `emp_no` int(11) not null auto_increment,"
        "  `birth_date` date not null,"
        "  `first_name` varchar(14) not null,"
        "  `last_name` varchar(16) not null,"
        "  `gender` enum('m','f') not null,"
        "  `hire_date` date not null,"
        "  primary key (`emp_no`)"
        ") engine=innodb")  #声明引擎是什么鬼,感觉不用这句也行的。
    
    tables['departments'] = (
        "create table `departments` ("
        "  `dept_no` char(4) not null,"
        "  `dept_name` varchar(40) not null,"
        "  primary key (`dept_no`), unique key `dept_name` (`dept_name`)"
        ") engine=innodb")
    
    tables['salaries'] = (
        "create table `salaries` ("
        "  `emp_no` int(11) not null,"
        "  `salary` int(11) not null,"
        "  `from_date` date not null,"
        "  `to_date` date not null,"
        "  primary key (`emp_no`,`from_date`), key `emp_no` (`emp_no`),"
        "  constraint `salaries_ibfk_1` foreign key (`emp_no`) "
        "     references `employees` (`emp_no`) on delete cascade"
        ") engine=innodb")
    
    #下面是创建database的函数。
    db_name = 'test2'
    def create_database(cursor):
        try:
            cursor.execute(
                "create datebase if not exists {} default character set 'utf8'".format(db_name))
                 # if not exists是我自己加的,可以在不存在时创建,在存在时不会报错。下面的话就有点多余了,也许。
        except mysql.connector.Error as e:
            print("Failed create datebase:{}".format(e))
    
    try:
        cnn.database = db_name  #这里应该是切换数据库。之前还傻傻的去执行use database;
    except mysql.connector.Error as e:
        if e.errno == errorcode.ER_BAD_DB_ERROR:
            create_database(cursor)
            cnn.database = db_name
        else:
            print(e)
    
    for name,ddl in tables.items():   
    #迭代字典的键值。版本不同,后面的方法也不一样。不知道手册是怎么用3.x的版本执行了2.x方法。黑人问号?
        try:
            print('create table {}:'.format(name),end='')#加上end只是为了免得瞎机吧换行。
            cursor.execute(ddl)
        except mysql.connector.Error as e:
            if e.errno == errorcode.ER_TABLE_EXISTS_ERROR:
                print('already exists.')
            else:
                print(e.msg)
        else:
            print('OK')
    
    

    相关文章

      网友评论

        本文标题:用python对Mysql做坏坏的事:联接与新建

        本文链接:https://www.haomeiwen.com/subject/gnyqgttx.html