mysql我的Python自学之路

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

2017-03-01  本文已影响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')

上一篇下一篇

猜你喜欢

热点阅读