Python&MySQL
目錄
一 介紹
1.1 數據庫分類
二 MySQL
2.1 語法
2.1.1 概覽
2.1.2 增加數據
-- 插入多條數據
INSERT INTO `表名`(`字段名1`,`字段名2...) VALUES
(值1,值2...),
.....
(值1,值2...);
2.1.3 刪除數據
DELETE FROM `表名`; -- 刪除表內容
DELETE FROM `表名` WHERE 條件; --刪除記錄
2.1.4 更改數據
UPDATE `表名`
SET `字段名1`=值1,`字段名2`=值2...
2.2 MySQLdb 模塊
2.2.1 連接數據庫
def get_conn(self):
try:
self.conn = MySQLdb.connect(
host='127.0.0.1',
user='root',
passwd='123456',
db='news',
port=3306,
charset='utf8'
)
except MySQLdb.Error as e:
print('Error:%s' % e) # 輸出字符串%s
2.2.2 關閉數據庫
def close_conn(self):
try:
if self.conn:
self.conn.close()
except MySQLdb.Error as e:
print('Error: %s' % e)
2.2.3 查詢數據
查詢一條記錄
def get_one(self):
sql = 'SELECT * FROM `news` WHERE `type`=%s;' # 準備SQL
cursor = self.conn.cursor() # 找到cursor
cursor.execute(sql, ('實時新聞',)) # 執行SQL。注意:當只有一個元素時,需要加上,
rest = cursor.fetchone() # 拿到一個結果
rest = dict(zip([k[0] for k in cursor.description], rest)) # 處理數據
cursor.close() # 關閉cursor
self.close_conn() # 關閉連接
return rest
查詢多條記錄
def get_more(self):
sql = 'SELECT * FROM `news` WHERE `view_count`=%s;'
cursor = self.conn.cursor()
cursor.execute(sql, (1,))
rest = cursor.fetchall() # 拿到全部結果
rest = [dict(zip([k[0] for k in cursor.description], row)) for row in rest]
cursor.close()
self.close_conn()
return rest
2.2.4 增加數據
# 增加一條數據
def add_one(self):
try:
sql=(
"INSERT INTO `news` (`title`,`content`,`type`,`image`,`author`,`is_valid`) VALUES"
"(%s,%s,%s,%s,%s,%s);"
)
cursor=self.conn.cursor()
cursor.execute(sql,('新聞標題','新聞內容','新聞類型','新聞路徑','李麗',1))
self.conn.commit() # 提交事務
cursor.close()
except MySQLdb.Error as e:
print('Error: %s' % e)
self.conn.commit() # 如果出錯,正確的部分會提交
# self.conn.rollback() # 一旦出錯,所有均不提交
self.close_conn()
三 ORM
3.1 介紹
ORM,即對象關係映射,它的作用是在關係型數據庫和業務實體對象之間作一個映射,使得在操作業務對象的時候,就不需要再去和複雜的SQL語句打交道,只需簡單的操作對象的屬性和方法。
優勢:
- 隱藏了數據訪問細節,提高開發效率;
- 構造固化數據結構變得簡單易行
劣勢:
- 降低性能;
- X-QL作爲一種數據庫與對象之間的過渡,增加了學習成本;
- 不適合複雜查詢
3.2 sqlalchemy 框架
SQLAlchemy是Python編程語言下的一款ORM框架
3.2.1 增加數據
# 插入一條記錄
def add_one(self):
new_obj = News(title='新聞n', content='內容')
self.session.add(new_obj)
self.session.commit()
return new_obj
# 插入多條記錄
def add_more(self):
self.session.add_all([
News(title='新聞666', content='內容3'),
News(title='新聞der', content='內容3')
])
self.session.commit()
3.2.2 刪除數據
def delete_data(self):
data = self.session.query(News).get() # 刪除一條記錄。刪除多條可以參照查詢多條記錄的寫法
self.session.delete(data)
self.session.commit()
3.2.3 更改數據
# 修改一條記錄
def update_data_one(self, jk):
data = self.session.query(News).get(jk)
if data:
data.is_valid = 1
self.session.add(data)
self.session.commit()
return True
else:
print('不存在該記錄,不可修改')
return False
# 修改多條記錄
def update_data_more(self):
data_list = self.session.query(News).filter_by(title='新聞3')
if data_list:
for item in data_list:
item.is_valid = 1
self.session.add(item) # 注意:要把add()寫在循環內
self.session.commit()
return True
else:
print('不存在該記錄,不可修改')
return False
3.2.4 查詢數據
# 查詢一條記錄
def get_one(self, jk):
data = self.session.query(News).get(jk)
# data=self.session.query(News).filter_by(id=4).first()
if data:
print('ID:{0} , content:{1}'.format(data.id, data.title))
return True
else:
print('記錄不存在')
return False
# 查詢多條記錄
def get_more(self):
data_list = self.session.query(News).filter_by(title='新聞3')
if data_list:
print('總共查詢的記錄有:{0}'.format(data_list.count()) + '條')
for item in data_list:
print('ID:{0} , content:{1}'.format(item.id, item.title))
else:
print('不存在該記錄')