# -*- coding: utf-8 -*- from __future__ import print_function import mysql.connector from mysql.connector import errorcode DB_NAME = 'employees' def createTable( ): global DB_NAME 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"), '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"), '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"), 'dept_emp': ( "CREATE TABLE `dept_emp` (" " `emp_no` int(11) NOT NULL," " `dept_no` char(4) NOT NULL," " `from_date` date NOT NULL," " `to_date` date NOT NULL," " PRIMARY KEY (`emp_no`,`dept_no`), KEY `emp_no` (`emp_no`)," " KEY `dept_no` (`dept_no`)," " CONSTRAINT `dept_emp_ibfk_1` FOREIGN KEY (`emp_no`) " " REFERENCES `employees` (`emp_no`) ON DELETE CASCADE," " CONSTRAINT `dept_emp_ibfk_2` FOREIGN KEY (`dept_no`) " " REFERENCES `departments` (`dept_no`) ON DELETE CASCADE" ") ENGINE=InnoDB"), 'dept_manager': ( " CREATE TABLE `dept_manager` (" " `dept_no` char(4) NOT NULL," " `emp_no` int(11) NOT NULL," " `from_date` date NOT NULL," " `to_date` date NOT NULL," " PRIMARY KEY (`emp_no`,`dept_no`)," " KEY `emp_no` (`emp_no`)," " KEY `dept_no` (`dept_no`)," " CONSTRAINT `dept_manager_ibfk_1` FOREIGN KEY (`emp_no`) " " REFERENCES `employees` (`emp_no`) ON DELETE CASCADE," " CONSTRAINT `dept_manager_ibfk_2` FOREIGN KEY (`dept_no`) " " REFERENCES `departments` (`dept_no`) ON DELETE CASCADE" ") ENGINE=InnoDB"), 'titles': ( "CREATE TABLE `titles` (" " `emp_no` int(11) NOT NULL," " `title` varchar(50) NOT NULL," " `from_date` date NOT NULL," " `to_date` date DEFAULT NULL," " PRIMARY KEY (`emp_no`,`title`,`from_date`), KEY `emp_no` (`emp_no`)," " CONSTRAINT `titles_ibfk_1` FOREIGN KEY (`emp_no`)" " REFERENCES `employees` (`emp_no`) ON DELETE CASCADE" ") ENGINE=InnoDB")} # TABLES which is a dictionary but actually it is a Table in mysql database config = { 'user': 'root', 'password': '123456', 'database': 'testdb', 'raise_on_warnings': True, } cnx = mysql.connector.connect( **config ) cursor = cnx.cursor( ) #一個MySQL服務器可以管理很多的數據庫,所以,當你要操作一個MySQL服務器的數據庫時,你需要具體指明具體的數據庫名 #如果你並不確定你想要的數據庫時存在的,你可以用下面的代碼確保該數據庫存在,如果數據庫不存在的話創建它 def create_database(cursor): try: cursor.execute( "CREATE DATABASE {} DEFAULT CHARACTER SET 'utf8'".format(DB_NAME)) except mysql.connector.Error as err: print("Failed creating database: {}".format(err)) exit(1) # ***************************************************************** # test create_database(cursor) # config = { # 'user': 'root', # 'password': '123456', # 'database': 'testdb', # 'raise_on_warnings': True, # } # cnx = mysql.connector.connect( **config ) # cursor = cnx.cursor( ) # # try: # cnx.database = DB_NAME # except mysql.connector.Error as err: # if err.errno == errorcode.ER_BAD_DB_ERROR: # create_database( cursor ) # cnx.database = DB_NAME # else: # print( err ) # exit( 1 ) #在該程序中我們嘗試通過數據庫的鏈接對象--cnx來對一個特定的數據庫進行操作,如果在該操作中存在錯誤, # 我們通過錯誤碼來檢驗是否是因爲該數據庫不存在,如果確實是因爲它不存在,則創建該數據庫 #***************************************************************** #當我們成功創建目標數據庫,我們通過迭代TABLE字典的項來創建表 # create_database(cursor) # for name, ddl in TABLES.iteritems(): # try: # print("Creating table {}: ".format(name), end='') # cursor.execute(ddl) # except mysql.connector.Error as err: # if err.errno == errorcode.ER_TABLE_EXISTS_ERROR: #判斷你要創建的表是否已經存在 # print("already exists.") # else: # print(err.msg) # else: # print("OK") # # cursor.close() # cnx.close()
python-MySQL學習筆記-第二章-在特定數據庫中創建表
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.