#coding:utf-8
import mysql.connector
#D:\chrome download\mysql-5.7.29-winx64\mysql-5.7.29-winx64\data
#打開這個data文件夾,找到一個類型爲err的文件,用記事本打開,裏面有句A temporary password is generated for root@localhost:這個後面記錄的就是你的初始密碼
#在cmd中啓動MySQL並將密碼修改爲123456
mydb = mysql.connector.connect(
host='localhost',
user='root',
passwd='123456',
database='mydatabase',
buffered = True
)
print(mydb)
#1、創建數據庫
mycursor = mydb.cursor()
# mycursor.execute("CREATE DATABASE mydatabase") #已創建的數據庫再創建會報錯
# mycursor.execute("CREATE DATABASE yangdatabase")
#/*tableName:爲要查詢的表,selSql爲查詢語句,val爲要查詢的where條件中的值***/
def selectFn(mycursor,tableName,selSql,val):
if selSql=="":
selSql="select * from "+tableName
mycursor.execute(str(selSql))
elif val!="":
mycursor.execute(str(selSql),val)
elif val=="":
mycursor.execute(str(selSql))
myRes = mycursor.fetchall()
print(tableName," 表中數據有:")
for x in myRes:
print(x)
#/*tableName:爲要插入值的表名,colStr爲表中的字段,valList爲要插入的值***/
def insertFn(mycursor,tableName,colStr,valList):
#插入的SQL語句:insert into customers(name,address) values(%s,%s)
splitStr = colStr.split(",")
valStr=""
#如下for循環是生成(%s,%s)
for x in range(len(splitStr)):
valStr+="%s"
if (x == (len(splitStr)-1)):
break
valStr += ","
insertSql = "insert into " + tableName + "(" + colStr + ")" +" values(" + valStr + ")"
mycursor.executemany(str(insertSql),valList)
mydb.commit()
print(mycursor.rowcount, " record inserted")
# print("1 record inserted,ID:", mycursor.lastrowid)
# select出重複數據並刪除
def deleteSameData(delSql,tableName):
mycursor.execute(delSql)
mycursor.execute(str("select * from " +tableName))
myresult1 = mycursor.fetchall()
for x in myresult1:
print(x)
#1、檢查數據庫是否創建好
print("1、檢查數據庫是否創建好")
mycursor.execute("SHOW DATABASES")
for x in mycursor:
print(x)
#2、創建表
mycursor.execute("drop table if exists users")
mycursor.execute("drop table if exists products")
createSql="create table if not exists users(name varchar(255),fav int)"
createSql2="create table if not exists products(id int,name varchar(255))"
valUsers = [
('John', 154),
('Peter', 154),
('Amy', 155),
('Hannah', 0),
('Michael', 0)
]
valProducts=[
(154, 'Chocolate Heaven'),
(155, 'Tasty Lemons'),
(156, 'Vanilla Dreams'),
(159, 'yang Cake')
]
mycursor.execute(createSql)
mycursor.execute(createSql2)
mydb.commit()
#3、開始對錶插入數據
print("3、開始對錶插入數據")
insertFn(mycursor,'users','name,fav',valUsers)
insertFn(mycursor,'products','id,name',valProducts)
mycursor.execute("alter table users add column uid int auto_increment primary key")
#4、查詢表中的數據
print("4、查詢表中的數據")
selectFn(mycursor,'users','','')
selectFn(mycursor,'products','','')
sql2 = "SELECT * FROM customers WHERE address = %s"
adr=("Yellow Garden 2", )
selectFn(mycursor,'customers',sql2,adr)
#5、練習join相關sql語句
print("5、練習join相關sql語句:")
joinSql ="select users.name as user,products.name as favor from users inner join products on users.fav = products.id"
# mycursor.execute(selectSql)
# # selectRes=mycursor.fetchall()
# # for x in selectRes:
# # print(x)
selectFn(mycursor,'users',joinSql,'')
leftJoinSql ="select users.name as user,products.name as favor from users left join products on users.fav = products.id"
rightJoinSql ="select users.name as user,products.name as favor from users right join products on users.fav = products.id"
selectFn(mycursor,'users',leftJoinSql,'')
selectFn(mycursor,'users',rightJoinSql,'')
join或inner join (例子:組合用戶和產品,查看用戶最喜歡的產品名稱)
組合兩張或更多表
您可以使用 JOIN 語句,根據它們之間的相關列組合兩個或多個表中的行
LEFT JOIN(例子:選擇所有用戶及其喜愛的產品)
在上例中,Hannah 和 Michael 被排除在結果之外,這是因爲 INNER JOIN 只顯示匹配的記錄。
如果希望顯示所有用戶,即使他們沒有喜歡的產品,請使用 LEFT JOIN 語句;
RIGHT JOIN(例子:選擇所有產品以及喜歡它們的用戶)
如果您想要返回所有產品以及喜歡它們的用戶,即使沒有用戶喜歡這些產品,請使用 RIGHT JOIN 語句:
執行結果:
1、檢查數據庫是否創建好
('mydatabase',)
('mysql',)
('yangdatabase',)
3、開始對錶插入數據
5 record inserted
4 record inserted
4、查詢表中的數據
users 表中數據有:
('John', 154, 1)
('Peter', 154, 2)
('Amy', 155, 3)
('Hannah', 0, 4)
('Michael', 0, 5)
products 表中數據有:
(154, 'Chocolate Heaven')
(155, 'Tasty Lemons')
(156, 'Vanilla Dreams')
(159, 'yang Cake')
customers 表中數據有:
('Vicky', 'Yellow Garden 2', 11)
5、練習join相關sql語句:
組合用戶和產品,查看用戶最喜歡的產品名稱:
('John', 'Chocolate Heaven')
('Peter', 'Chocolate Heaven')
('Amy', 'Tasty Lemons')
選擇所有用戶及其喜愛的產品:
('John', 'Chocolate Heaven')
('Peter', 'Chocolate Heaven')
('Amy', 'Tasty Lemons')
('Hannah', None)
('Michael', None)
選擇所有產品以及喜歡它們的用戶:
('John', 'Chocolate Heaven')
('Peter', 'Chocolate Heaven')
('Amy', 'Tasty Lemons')
(None, 'Vanilla Dreams')
(None, 'yang Cake')