Mysql 創建數據庫的設置默認編碼和校驗 python

在創建數據庫的時候,經常用到一句:

CREATE DATABASE `xxxx` DEFAULT CHARACTER SET utf8 COLLATE utf8_general_ci; 

CREATE DATABASE `xxxx` :創建數據庫  ,數據庫的名稱 使用 ` ` ,這裏的 ` `  是ESC下面的那個符號 

DEFAULT CHARACTER SET utf8 :數據庫字符集。設置數據庫的默認編碼爲utf8  

COLLATE utf8_general_ci:數據庫校對規則 

 

python 連接 mysql db ,多表查詢

#!/usr/bin/env python
# encoding: utf-8
'''
@author: toby
@license: (C) Copyright 2013-2017, Node Supply Chain Manager Corporation Limited.
@contact: 
@software: pycharm
@file: sql.py
@time: 2020/6/6 11:47
@desc:
'''

import pymysql
# 添加用戶允許從任何主機連接到mysql服務器
# GRANT ALL PRIVILEGES ON *.* TO 'root'@'%' IDENTIFIED BY '123456' WITH GRANT OPTION;

class mydb:
    def __init__(self):

        self.db = pymysql.connect(
            host = 'localhost',
            user = 'root',
            password = '123456',
            port = 3306,
            database = 'mydb', charset="utf8"
        )
        print('服務器連接成功!')
        print('=============================')

        self.cursor = self.db.cursor()

# # 得到一個可以執行SQL語句並且將結果作爲字典返回的遊標
# cursor = db.cursor(cursor=pymysql.cursors.DictCursor)
#
# # 定義要執行的SQL語句
# sql = "select version()"
# cursor.execute(sql)
# # #使用fetchone()方法獲取一條數據
# data = cursor.fetchone()
# print("Mysql version : %s"%data)

    def create_table(self):
        try:
            pass
            # 如果數據表已經存在使用execute()方法刪除表。
            self.cursor.execute("DROP TABLE IF EXISTS EMPLOYEE")

            # 創建數據表SQL語句
            sql = """CREATE TABLE EMPLOYEE (
                             FIRST_NAME  CHAR(20) NOT NULL,
                             LAST_NAME  CHAR(20),
                             AGE INT,  
                             SEX CHAR(1),
                             INCOME FLOAT )"""

            self.cursor.execute(sql)
            print('創建table 成功!')
        except Exception as e:
            print(e)


    #創建
    def create_tb2(self):
        try:
            self.cursor.execute("DROP TABLE IF EXISTS department,staff")
            sql1 = """create
                    table
                    department(id  int,
                    name  varchar(20)  
                    )"""

            sql2 = """create
                    table staff(
                            id  int
                            primary key auto_increment,
                            name  varchar(20),  
                            sex  enum('male', 'female')  not null
                            default 'male',
                            age int,
                            dep_id  int
                        )"""

            self.cursor.execute(sql1)
            self.cursor.execute(sql2)
            print('創建table department   staff 成功!')
        except  Exception as  e:
            print(e)



    #插入
    def insert_tb(self):
        try:
            sql = """insert into department values
                    (200,'挖礦小分隊'),
                    (201,'人力資源'),
                    (202,'銷售'),
                    (203,'運營')"""
            sql2 = """insert into staff(name,sex,age,dep_id) values
                        ('程咬金','male',38,200),
                        ('露娜','female',26,201),
                        ('李白','male',38,201),
                        ('王昭君','female',28,202),
                        ('典韋','male',118,200),
                        ('小喬','female',16,204)"""
            self.cursor.execute(sql)
            self.cursor.execute(sql2)
            self.db.commit()
            print('insert department   staff 成功!')
        except Exception as e :
            print(e)
            print("插入失敗")

    def duobiaosele(self):
        # 內鏈接 (常用) 只連接匹配的行 ,兩個表中共同的屬性的進行匹配顯示,沒有匹配上的 ,不顯示
        try:
            print('================多表內聯的查詢=====================')
            sql = """
            select * from staff inner join department on staff.dep_id =department.id
            """
            self.cursor.execute(sql)

            res = self.cursor.fetchall()
            for i in res :
                print(i)
            print('=============================================')

            print('================多表外聯的查詢 左連接=====================')
            #外鏈常用   左連接
            sql2 ="""select * from staff left join department on staff.dep_id = department.id"""
            self.cursor.execute(sql2)

            res = self.cursor.fetchall()
            for i in res:
                print(i)

            print('=============================================')

            print('================多表外聯的查詢 右連接=====================')
            #外鏈  右連接
            sql3 = """select * from staff right join department on  staff.dep_id = department.id """
            self.cursor.execute(sql3)

            res = self.cursor.fetchall()
            for i in res:
                print(i)

            print('=============================================')

            print('================多表全部外聯的查詢=====================')
            #全部外鏈  顯示左右兩個表全部記錄
            sql4 =sql2+" union "+sql3
            self.cursor.execute(sql4)
            res = self.cursor.fetchall()
            for i in res:
                print(i)


        except Exception as  e:
            print(e)




    def db_close(self):
        # 關閉光標對象
        self.cursor.close()

        # 關閉數據庫連接
        self.db.close()


if __name__ == '__main__':
    mydb = mydb()
    # mydb.create_tb2()
    # mydb.insert_tb()
    mydb.duobiaosele()
    mydb.db_close()

 

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章