欢迎您访问程序员文章站本站旨在为大家提供分享程序员计算机编程知识!
您现在的位置是: 首页

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的猿们共勉^-^