Python連接MySQL數據庫

#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')

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