使用 Python 操作 MySQL,這篇文章別錯過~
閱讀本文大概需要 14 分鐘。

1. 前言
2. 準備

Python-MySql
PyMysql
SQLAlchemy
3. PyMysql
#?安裝依賴
pip3?install?pymysql
import?pymysql
#?數據庫連接
self.db?=?pymysql.connect(host='localhost',
??????????????????????????port=3306,
??????????????????????????user='root',
??????????????????????????password='**',
??????????????????????????database='xh')
#?獲取游標
self.cursor?=?self.db.cursor()
#?插入一條數據
SQL_INSERT_A_ITEM?=?"INSERT?INTO?PEOPLE(name,age)?VALUES('xag',23);"
def?insert_a_item(self):
????"""
????插入一條數據
????:return:
????"""
????try:
????????self.cursor.execute(SQL_INSERT_A_ITEM)
????????self.db.commit()
????except?Exception?as?e:
????????print('插入數據失敗')
????????print(e)
????????self.db.rollback()
#?插入多條數據SQL,name和age是變量,對應列表
SQL_INSERT_MANY_ITEMS?=?"INSERT?INTO?PEOPLE?(name,?age)?VALUES(%s,?%s)"
#?待插入的數據
self.datas?=?[("張三",?23),?("李四",?24),?("王五",?25)]
def?insert_items(self):
????"""
????插入多條記錄
????:return:
????"""
????try:
????????self.cursor.executemany(SQL_INSERT_MANY_ITEMS,?self.datas)
????????self.db.commit()
????except?Exception?as?e:
????????print("插入數據異常")
????????self.db.rollback()
通過游標對象執(zhí)行具體的 SQL 語句
通過游標對象,獲取到元組數據
遍歷元組數據,查看結果
#?查詢所有記錄
SQL_QUERY_ALL?=?"SELECT?*?FROM?PEOPLE;"
def?query(self):
????"""查詢數據"""
????#?查詢所有數據
????self.cursor.execute(SQL_QUERY_ALL)
????#?元組數據
????rows?=?self.cursor.fetchall()
????#?打印結果
????for?row?in?rows:
????????id?=?row[0]
????????name?=?row[1]
????????age?=?row[2]
????????print('id:',?id,?',name:',?name,?'age:',?age)
#?按id查詢
SQL_QUERY_WITH_CONDITION?=?"SELECT?*?FROM?PEOPLE?WHERE?id={};"
#?查詢id為5的記錄
self.cursor.execute(SQL_QUERY_WITH_CONDITION.format(5))
#?更新(通過id去更新)
SQL_UPDATE?=?"UPDATE?PEOPLE?SET?name='%s',age=%s?WHERE?id=%s"
def?update(self):
????"""
????更新數據
????:return:
????"""
????sql_update?=?SQL_UPDATE?%?("王五五",?30,?5)
????print(sql_update)
????try:
????????self.cursor.execute(sql_update)
????????self.db.commit()
????except?Exception?as?e:
????????self.db.rollback()
????????print('更新數據異常')
????????print(e)
#?刪除(通過id去刪除數據)
SQL_DELETE?=?"DELETE?FROM?PEOPLE?WHERE?id=%d"
def?delete(self):
????"""
????刪除記錄
????:return:
????"""
????try:
????????#?刪除的完整sql
????????sql_del?=?SQL_DELETE?%?(5)
????????self.cursor.execute(sql_del)
????????self.db.commit()
????except?Exception?as?e:
????????#?發(fā)生錯誤時回滾
????????self.db.rollback()
????????print(e)
def?teardown(self):
????#?釋放資源
????self.cursor.close()
????self.db.close()
4.?SQLAlchemy
#?安裝依賴包
pip3?install?sqlalchemy
from?sqlalchemy?import?Column,?Integer,?String,?create_engine
from?sqlalchemy.ext.declarative?import?declarative_base
#?基礎類
Base?=?declarative_base()
#?自定義的表
class?People(Base):
????#?表名
????__tablename__?=?'people'
????#?定義字段
????id?=?Column(Integer,?primary_key=True)
????name?=?Column(String(255))
????age?=?Column(Integer)
????def?__repr__(self):
????????"""
????????便于打印結果
????????:return:
????????"""
????????return?".format(self.id,?self.name,?self.age)
#?創(chuàng)建數據庫的引擎實例對象
#?數據庫名稱:xh
engine?=?create_engine("mysql+pymysql://root:數據庫密碼@localhost:3306/xh",
???????????????????????????????encoding="utf-8",
???????????????????????????????echo=True)
#?創(chuàng)建表結構
# checkfirst:判斷表是否存在,如果存在,就不重復創(chuàng)建
Base.metadata.create_all(engine,?checkfirst=True)
#?實例化會話
self.session?=?sessionmaker(bind=engine)()
def?add_item(self):
????"""
????新增
????:return:
????"""
????#?實例化一個對象
????people?=?People(name='xag',?age=23)
????self.session.add(people)
????#?提交數據才會生效
????self.session.comit()
def?add_items(self):
????"""
????新增多條記錄
????:return:
????"""
????datas?=?[
????????People(name='張三',?age=20),
????????People(name='李四',?age=21),
????????People(name='王五',?age=22),
????]
????self.session.add_all(datas)
????self.session.commit()
def?query(self):
????"""
????查詢
????:return:
????"""
????#?查詢所有記錄
????#?result?=?self.session.query(People).all()
????#?查詢name/age兩個字段
????result?=?self.session.query(People.name,?People.age).all()
????print(result)
#?條件查詢
resp?=?self.session.query(People).filter_by(name='xag').first()
print(resp)
query 查詢出待更新的對象
直接更新對象中的數據
使用會話對象提交修改,完成更新操作
def?update1(self,?id):
????"""
????更新數據1
????:return:
????"""
????#?獲取數據
????temp_people?=?self.session.query(People).filter_by(id=id).first()
????#?更新數據
????temp_people.name?=?"星安果"
????temp_people.age?=?18
????#?提交修改
????self.session.commit()
def?update2(self,?id):
????"""
????更新數據2
????:param?id:
????:return:
????"""
????#?使用update()方法直接更新字段值
????self.session.query(People).filter(People.id?==?id).update({People.name:?"xag",?People.age:?1})
????self.session.commit()
def?del_by_id(self,?id):
????"""
????通過id刪除一條記錄
????:param?id:
????:return:
????"""
????del_count?=?self.session.query(People).filter(People.id?==?id).delete()
????print('刪除數目:',?del_count)
????self.session.commit()
5.最后
評論
圖片
表情
