在創建數據庫的時候,經常用到一句:
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()