python访问mysql数据库

1 连接mysql数据库

# 引入pymysql模块
import pymysql

# 连接mysql数据库
conn = pymysql.connect(host=host, user='user', password='password', db='database', port=3306, charset="utf8")

2 查询mysql数据库

def findUserById(userId):
    try:
        # 获取mysql连接的游标
        cursor = conn.cursor()
        # 定义查询字符串
        sql = "select username from user where id = '"+userId+"'"
        # 执行sql查询
        cursor.execute(sql)
        # 获取查询结果
        result = cursor.fetchone()
        return result[0]
    except Exception as ex:
        print("exception: " + str(ex))
conn.rollback()
return "" if __name__ == "__main__": username = findUserById("xxx") print(username)
conn.close()

 3 更新mysql数据库用到的命令

修改数据库时,需要执行conn.commit()才生效。执行cursor.execute(sql)之后,再执行conn.commit()。

cursor.lastrowid  获取最后插入行的主键id。

conn.insert_id()  获取最新插入行的主键id,这个需要在conn.commit()之前执行,否则会返回0。

conn.rollback()  发生异常时回滚,通常用在修改数据库的操作时。

4 mysql批量插入和批量更新

a. 批量插入

sql批量插入基本语法:insert into table(xxx,xxx,...) values(), (), ...

def insertMany(manyData):
    try:
        cursor = conn.cursor()
        # 插入语句
        sql = "insert into city(`name`, state) values " + manyData
        # 执行
        cursor.execute(sql)
        # 获取最后一个插入的主键id
        print(cursor.lastrowid)
        # 提交
        conn.commit()
    except Exception as ex:
        print("exception: " + str(ex))
        # 回滚
        conn.rollback()

if __name__ == "__main__":
    ll = []
    for i in range(0, 10):
        name = "a" + str(i)
        # 注意:向mysql中插入字符串类型的数据时,需要用""
        row = '("'+name+'", "'+str(i)+'")'
        ll.append(row)
    insertMany(",".join(ll))
    # 关闭连接
    conn.close()

b. 批量更新

在where子句中设置批量查询条件:例如 where id in (xxx,xxx,...)

def updatemany(value, manyData):
    try:
        cursor = conn.cursor()
        # 插入语句
        sql = "update city set name = '"+value+"'" + " where id in " + manyData
        # 执行
        cursor.execute(sql)
        # 提交
        conn.commit()
    except Exception as ex:
        print("exception: " + str(ex))
        # 回滚
        conn.rollback()

if __name__ == "__main__":

    ll = []
    for i in range(10, 19):
        ll.append(str(i))

    manyIds = "(" + ",".join(ll) + ")"

    # 更新id在[10,18]内的所有记录的name字段
    updatemany("wo", manyIds)
    conn.close()
posted @ 2019-09-25 11:54  江湖凶险  阅读(181)  评论(0编辑  收藏  举报