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('不存在该记录')