【python】-MySQL基本操作和存儲過程

1、調用connect()方法打開數據庫連接,該方法返回數據庫連接對象
2、通過數據庫連接對象打開遊標
3、使用遊標執行SQL語句(包含DDL、DML、select查詢語句等)
4、關閉遊標
5、關閉數據庫連接
6、本例子練習了a、數據庫連接、b、執行語句、d、執行多條插入、d、執行多次獲取、e、sqlite自定義函數 f、自定義聚集函數
***************
1、python如果只帶一個元素的元組,元素後面要加一個","  逗號。 
2、DML語句(Data Manipulation Language):用於增刪改表中數據,DML是伴隨TCL事務控制的。
3、DDL語句(Data Definition Language):數據定義語言,用來維護數據庫對象 
4、rowcount屬性在update語句後面纔會返回行數,默認是-1
**************MySQL與SQLite不同之處
1、#mysql的語句:a、整型爲int b、字符型的爲varchar c、浮點型爲double d、自增長auto_increment
2、佔位符爲%s
3、MySQL8.0中存儲過程定義前要使用DELIMITER

'''
1、調用connect()方法打開數據庫連接,該方法返回數據庫連接對象
2、通過數據庫連接對象打開遊標
3、使用遊標執行SQL語句(包含DDL、DML、select查詢語句等)
4、關閉遊標
5、關閉數據庫連接
6、本例子練習了a、數據庫連接、b、執行語句、d、執行多條插入、d、執行多次獲取、e、sqlite自定義函數 f、自定義聚集函數
***************
1、python如果只帶一個元素的元組,元素後面要加一個","  逗號。 
2、DML語句(Data Manipulation Language):用於增刪改表中數據,DML是伴隨TCL事務控制的。
3、DDL語句(Data Definition Language):數據定義語言,用來維護數據庫對象 
4、rowcount屬性在update語句後面纔會返回行數,默認是-1
**************MySQL與SQLite不同之處
1、#mysql的語句:a、整型爲int b、字符型的爲varchar c、浮點型爲double d、自增長auto_increment
2、佔位符爲%s
3、存儲過程定義前要使用DELIMITER
'''
import mysql.connector

#1、打開或創建數據庫
conn = mysql.connector.connect(user = 'root', password = 'xueshan007',host = 'localhost',port = '3306',database = 'python',use_unicode = True)
#mysql的連接語句比SQLite的多了很多參數
#2、獲取遊標
c = conn.cursor()
#3、執行語句
#***3.1、3.2、3.3多個章節的語句可以逐次打開執行***#
#3.1數據庫DDL語句,創建user_tb、order_tb兩個表
create_user_tb_SQL = '''create table user_tb(user_id int primary key auto_increment,
name varchar(255),
pass varchar(255),
gender varchar(255))'''
create_order_tb_SQL = '''create table order_tb(order_id int primary key auto_increment,
item_name varchar(255),
item_price double,
item_number double,
user_id int,
foreign key(user_id) references user_tb(user_id) )'''
c.execute(create_user_tb_SQL)
c.execute(create_order_tb_SQL)

#3.2執行插入語句
#c.execute('insert into user_tb (name,pass,gender) values (%s,%s,%s)',("孫悟空","123456","male"))
#conn.commit()

#3.3執行多行插入
#insertManyList = (("sun","123456","male"),("bai","123456","female"),("zhu","123456","male"))
#c.executemany('insert into user_tb (name,pass,gender) values (%s,%s,%s)',insertManyList)#此處用了佔位符"%s"
#conn.commit()

#3.3.1執行多行插入-通過設置autocommit屬性
#conn.autocommit = True
#insertManyList = (("zhang","123456","male"),("liu","123456","female"),("li","123456","male"))
#c.executemany('insert into user_tb (name,pass,gender) values (%s,%s,%s)',insertManyList)#此處用了佔位符"%s"

#3.4執行獲取數據並逐行呈現
'''c.execute('select * from user_tb where user_id > %s',(1,))
#print('查詢返回的記錄數:',c.rowcount)
#通過遊標的descritpion屬性獲取列信息
for col in (c.description):
    print(col[0],end = '\t')
print('\n','- '*30)
while True:
    row = c.fetchone()
    if not row:
        break
    print(row)
    print(row[1]+'---->'+row[2])'''

#3.5調用存儲函數callproc(self,procname,args=())
'''#使用自定義函數。場景:可以用於密碼加密
****************(*號內的爲存儲過程在mysql8.0中定義)
DELIMITER //
create procedure add_proc(in a int,in b int,out sum_result int) 
BEGIN
set sum_result = a + b;
END;//
****************
restult_args = c.callproc('add_proc',(5,6,0))
print(restult_args)
print(restult_args[2])'''

#4、關閉遊標
c.close()
#5、關閉連接
conn.close()

 

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