python操作数据库Mysql
程序员文章站
2024-03-21 21:13:04
...
mysql基础语法
DDL(数据定义语句)
CREATE TABLE/DATABASE (创建表单)
ALERT TABLE/DATABASE (更改表单)
DROP TABLE/DATABASE (删除表单)
DML(数据管理语句)
INSERT(增)/DELETE(删)/UPDATE(改)SELECT(查)
创建数据库并使用
一般我们用大写来写mysql预定义的关键字和保留字
-- mysql的注释写法
DROP DATABASE `mydatabase` IF EXISTS;
CREATE DATABASE `mydatabase`;
USE `mydatabase`;
建表语句
-- 创建前删除原有的表
DROP DATABASE IF EXISTS `mydatabase`;
CREATE TABLE `mytables`(
`id` INT NOT NULL AUTO_INCREMENT PRIMARY KEY,
`name` VARCHAR(200) NOT NULL,
`sex` CHAR(1) NULL,
`time_in` DATETIME NULL
) DEFAULT CAHRSET 'UTF8';
常见数值类型
int char varchar datetime
NOT NULL : 不为空
AUTO_INCREMENT : 自增
PRIMARY KEY : 主键
DEFAULT CHARSET ‘UTF8’ : 默认字符集为‘utf-8’
插入语句
INSERT INTO `mytables` VALUE(1,'李白','剑仙','男',now());
-- now() 为mysql内置函数 表示当前时间
INSERT INTO `mytables`(`name`,`nickname`) VALUES
('关羽','二哥'),
('张飞','三哥')
;
查询语句
SELECT `id`,`name`,`nickname` FROM `mytables` where `sex`='男' ORDER BY `id` DESC
HAVING `nickname` LIMIT 0,2;
-- ORDER BY : 查询顺序 ASC正序 DESC倒序
-- LIMIT : 分页
-- HAVING : 对上面已经分组的数据进行过滤的条件
修改语句
在进行删除或者修改表中的 数据时,必须要添加WHERE语句,否则后果自负···
UPDATE `mytables` SET `set`='女' WHERE 'sex'='男';
删除语句
DELETE FROM `students` WHERE `sex`='男';
python 安装MySQLdb模块与语法
windows下安装 : pip install MySQL-python
但是经常会发现出错,这个时候可以去下载编译好的文件
下载好之后保存在你安装python的根目录下 然后运行:
pip install mysqlclient-1.3.12-cp36-cp36m-win_amd64.whl
之后就可以大功告成了!
使用python连接mysql数据库
import MySQLdb
#获取连接
try:
conn = MySQLdb.connect(
host = 'localhost',
port = 3306,
user = 'root',
password = '123456',
db = 'flask_news',
charset = 'utf8')
#获取数据 准备SQL
sql = 'SELECT * FROM `mydatabase`'
#执行SQL
cursor = conn.cursor()
try:
data = cursor.excute(sql)
print(data)
#打印结果
rows = cursor.fetchall()
print(cursor.description)
for row in rows:
print(row)
except MySQL.Error as e:
print('Error %d: %s' % (e.args[0], e.args[1]))
#关闭连接
conn.close()
except MySQLdb.Error as e:
print('Error %d:%s' % (e.args[0], e.args[1]))
return self.con
下面是一个python操作数据库的实例:
import MySQLdb
#创建一个类,封装数据库所有的操作
class MysqlHandle(object):
def __init__(self):
self.get_conn()
#获取连接
def get_conn(self):
try:
self.conn = MySQLdb.connect(
host='127.0.0.1',
user='root',
password='',
db='mydatabase',
port=3306,
charset='utf8'
)
except MySQLdb.Error as e:
print('Error:',e)
#关闭连接
def close_conn(self):
try:
if self.conn:
self.conn.close()
except MySQLdb.Error as e:
print('Error',e)
#查询单条数据
def get_one(self):
sql = 'SELECT * FROM `mydatabase` WHERE `sex` = %s ORDER BY `id` DESC;'
cursor = self.conn.cursor()
cursor.excute(sql, ('something'))
#此时拿到的数据为元组,查询行数可以用 cursor.rowcount
#查询数据的描述,可以用 cursor.description
#将数据由元组转化为字典
data = dict(zip([k[0] for k in cursor.description],cursor.fetchone()))
cursor.close()
self.conn.close_conn()
return rest
#查询多条数据 以及分页查询
def get_more(self, page, page_size):
offset = (page - 1) * page_size
sql = 'SELECT * FROM `mydatabase` WHERE `sex` = %s ASC LIMIT %s %s;'
cursor = self.conn.cursor()
cursor.execute(sql, ('something',offset, page_size))
rest = [dict(zip([k[0] for k in cursor.description], row)) for row in cursor.fetchall()]
cursor.close()
self.conn.close_conn()
return rest
#添加一条数据
def add_one(self):
try:
#小技巧 : 将语句变为元组,可以换行
sql = (
"INSERT INTO `mydatabase`(`title`) VALUE"
"(%s);"
)
cursor = self.conn.cursor()
cursor.execute(sql,('something'))
self.conn.commit()
cursor.close()
except:
print('error')
'''
数据回滚,是数据库中事物的执行,有一条插入失败,所有的都不插入,数据库回滚到操作之前的样子
'''
self.conn.rollback()
self.close_conn()
#执行函数 操作数据库
def main():
obj = MysqlHandle()
obj.add_one()
'''
if __name__ == '__main__'的意思是:
当.py文件被直接运行时,if __name__ == '__main__'之下的代码块将被运行;
当.py文件以模块形式被导入时,if __name__ == '__main__'之下的代码块不被运行。
'''
if __name__ == '__main__'
main()
python操作mysql的操作大致流程就是这些,当然还有不完善的地方,想继续深入了解的话得去看官网的介绍了,在这里与各位正在学习python的猿们共勉^-^
上一篇: 获取当前数据库的所有表和视图的名称
下一篇: mysql 面试总结