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()