python3中可以使用庫pymysql
數(shù)據(jù)準(zhǔn)備:
????搭建一個(gè)數(shù)據(jù)庫奋蔚,我是在docker下搭建的Mysql(端口號是3306筐骇,賬號是root槽片,密碼123456)
????建立數(shù)據(jù)庫test_db,表TB_Student捞蚂,表結(jié)構(gòu)如下:
需要做的操作如下:
????在上述名單中金赦,ID是連續(xù)編號的數(shù)字。現(xiàn)在需要按照班級給他們設(shè)一個(gè)新的序號(Seq),每個(gè)班級從1開始連續(xù)編號洛退,輸出如下表所示的結(jié)果瓣俯,請寫成相應(yīng)的sql語句或者代碼。
以下是關(guān)于pymysql的相關(guān)知識
1.先導(dǎo)入庫名
import pymysql
可以在pycharm中下載相應(yīng)的包
2.連接數(shù)據(jù)庫
pymysql.connect(host="localhost",port=3306,database='test_db',user='root',password='123456')
說明:
????host是數(shù)據(jù)庫的地址兵怯,因?yàn)槲业臄?shù)據(jù)庫就在本機(jī)彩匕,所以就是localhost
????port是在docker建立mysql的時(shí)候設(shè)置的端口(注意端口號非字符串,不用引號)
????database要使用到的數(shù)據(jù)庫名
????user和password是連接mysql的賬號媒区、密碼
3.獲取游標(biāo)
#使用cursor()方法創(chuàng)建一個(gè)游標(biāo)對象 cursor
cursor = db.cursor()
4.執(zhí)行SQL查詢語句
說明:
????聲明游標(biāo)后驼仪,可以反復(fù)調(diào)用cursor.execute()去執(zhí)行不同sql語句
? ? 查出來的結(jié)果是通過cursor.fetchall() 或者?cursor.fetchone()獲取到的,是元組類型
#使用execute()方法執(zhí)行 SQL 查詢
cursor.execute("select count(*) from TB_Student;")
#獲取表里所有內(nèi)容
result_count = cursor.fetchall()
#獲取單條數(shù)據(jù)
result_count = cursor.fetchone()
5.執(zhí)行修改語句
注意:若有修改數(shù)據(jù)庫的操作袜漩,需要執(zhí)行commit操作绪爸,才可以生效,才可以真正把修改更新到數(shù)據(jù)庫宙攻。
#連接完數(shù)據(jù)庫并不會自動(dòng)提交奠货,所以需要手動(dòng) commit 你的改動(dòng)
db.commit()
以上是所需要的只是,所以最開始的問題的代碼如下:
#!/usr/bin/python3
import pymysql
#連接數(shù)據(jù)庫
#cursorclass = pymysql.cursors.DictCursor變成字典作為元素的列表,例如[{'count(*)': 13}]
db = pymysql.connect(host="localhost",port=3306,database='test_db',user='root',password='123456',
? ? ? ? ? ? ? ? ? ? cursorclass = pymysql.cursors.DictCursor)
#通過連接對象獲取游標(biāo)
cursor = db.cursor()
#查詢表TB_Student行數(shù)(在元組中)
#使用execute()方法執(zhí)行 SQL 查詢
cursor.execute("select count(*) from TB_Student;")
#獲取表里所有內(nèi)容
result_count = cursor.fetchall()
#輸出結(jié)果為[{'count(*)': 13}]座掘,'count(*)'是select語句里需要查詢的字段
print(result_count)
#result_count[0][0]才是真正的表TB_Student行數(shù)
print(result_count[0]['count(*)'])
#為表TB_Student增加字段seq
#cursor.execute("alter table TB_Student add seq int;")
#i是列數(shù)
#j是插入的數(shù)
j=0
n=5
for i in range(1,result_count[0]['count(*)']+1):
? ? #seq的規(guī)律是(1234512345612345..)
? ? #當(dāng)?shù)降?递惋、12柔滔、19列需要從新從1開始(j賦值為1)
? ? if j < n:
? ? ? ? j = j+1
? ? else:
? ? ? ? n = n+1
? ? ? ? j=1
? ? print("i:"+str(i)+" j:"+str(j))
? ? sql1="update TB_Student set seq=%s where id=%s"%(j,i)
? ? cursor.execute(sql1)
cursor.execute("select * from TB_Student;")
r1=cursor.fetchall()
print(r1)
#連接完數(shù)據(jù)庫并不會自動(dòng)提交,所以需要手動(dòng) commit 你的改動(dòng)
db.commit()
db.close()