ICode9

精准搜索请尝试: 精确搜索
首页 > 其他分享> 文章详细

2022/6/18

2022-06-19 01:00:15  阅读:161  来源: 互联网

标签:execute cur 18 cursor user 2022 print conn


1、Python连接数据库

要想操作数据库,仅连接数据是不够的,必须拿到操作数据库的游标才能进行后续操作,比如读取数据、添加数据。通过获取到的数据库连接示例conn下的cursor()方法来创建游标。游标用来返回结果。

import pymysql
conn = pymysql.connect('locahost',user='root',passwd='123456',db='testdb',charset='utf-8')
cusor = conn.cursor

备注:cursor返回一个游标实例对象,其中包含很多操作数据的方法,比如执行SQL语句。

执行SQL语句execute和executemany:

execute(query,args=None):执行单条SQL语句,执行成功后返回受影响的行数。query为要执行的sql语句,且为字符串类型。args为可选的序列或映射,用于query的参数值,如果args为序列,query中必须使用%s做占位符;如果args为映射,query中必须使用%(key)s做占位符。

 

executemany(query,args=None):批量执行SQL语句,比如批量插入数据,执行成功后返回受影响的行数,query为要执行的sql语句,且为字符串类型。args为嵌套的序列或映射,用于query的参数值。

 

示例:

创建数据库:

import pymysql
#打开数据库连接,不需要指定数据库,因为需要创建数据库
conn = pymysql.connect('locahost',user='root',passwd='123456',charset='utf-8')
#获取游标
cusor = conn.cursor
#创建数据库
cursor.execute('CREATE DATABASE IF NOT EXISTS pythonDB DEFAULT CHARSET utf8 COLLATE utf8_general_ci;')
#先关闭游标
cursor.close()
#再关闭数据库
con.close()
print('数据库创建成功')

备注:创建后可使用show databases查询确认

创建表:

import pymysql
#打开数据库连接,指定数据库
conn = pymysql.connect('locahost',user='root',passwd='123456',db='testdb',charset='utf-8')
#获取游标
cusor = conn.cursor
#创建user表
cursor.execute('drop table if exists user')
sql="""CREATE TABLE IF NOT EXISTS `user` (
      `id` int(11) NOT NULL AUTO_INCREMENT,
      `name` varchar(255) NOT NULL,
      `age` int(11) NOT NULL,
      PRIMARY KEY (`id`)
    ) ENGINE=InnoDB  DEFAULT CHARSET=utf8 AUTO_INCREMENT=0"""
cursor.execute(sql)
#先关闭游标
cursor.close()
#再关闭数据库
con.close()
print('user表创建成功')

插入单条数据:

import pymysql
#打开数据库连接,不指定数据库
conn = pymysql.connect('locahost',user='root',passwd='123456',charset='utf-8')
#选择需要连接的数据库
conn.select_db('testdb')    #获取游标
cusor = conn.cursor
insert = cur.execute("insert into user values(1,'tom',18)")
print("添加语句受影响的行数:",insert)

#第二种插入数据的方式,通过字符串传入值
sql = "insert into user values(%s,%s,%s)"
cur.execute(sql,(3,'kongsh',20))
#先关闭游标
cursor.close()
#再关闭数据库
con.close()
print('SQL执行成功')

批量插入多条数据:

import pymysql
#打开数据库连接,不指定数据库
conn = pymysql.connect('locahost',user='root',passwd='123456',charset='utf-8')
#选择需要连接的数据库
conn.select_db('testdb')   
cusor = conn.cursor      #获取游标
sql = "insert into user values(%s,%s,%s)"
cur.executemany(sql,[(4,'wen',20),(5,'tom',10),(6,'test',30)])
#先关闭游标
cursor.close()
#再关闭数据库
con.close()
print('SQL执行成功')

备注:批量插入多条SQL语句采用的是executemany(sql,args)函数,返回受影响的行数。
args参数是一个包含多个元组的列表,每个元组对应一条mysql中的一条数据。这里的%s不需要加引号,否则插入数据的数据类型错误

查询数据:

使用execute()函数得到的只是受影响的行数,并不能真正拿到查询的内容。cursor对象还提供了3中提取数据的方法:fetchone、fetchmany、fetchall。每个方法都会导致游标移动。

cursor.fetchone():获取游标所在处的一行数据,返回元组,没有返回None;

cursor.fetchmany(size):接受size行返回结果行。如果size大于返回的结果行的数量,则会返回cursor.aruuaysize条数据。

cursor.fetchall():接收全部的返回结果行。

示例:

fetchone:

import pymysql
#打开数据库连接,不指定数据库
conn = pymysql.connect('locahost',user='root',passwd='123456',charset='utf-8')
#选择需要连接的数据库
conn.select_db('testdb')   
cusor = conn.cursor      #获取游标
cur.execute("select * from user")
while 1:
    res = cur.fetchone()
    if res is None:
        break
    print(res)
#先关闭游标
cursor.close()
#再关闭数据库
con.close()
print('SQL执行成功')

#输出结果:
(1,'tom',18)
(3,'kongsh',20)
(4,'wen',20)
(5,'tom',10)
(6,'test',30)

备注:fetchone()函数必须跟execute()函数结合使用,并且在execute()函数之后使用。

fetchmany:

import pymysql
#打开数据库连接,不指定数据库
conn = pymysql.connect('locahost',user='root',passwd='123456',charset='utf-8')
#选择需要连接的数据库
conn.select_db('testdb')   
cusor = conn.cursor      #获取游标
cur.execute("select * from user")
resTuple = cur.fetchmany(3)
for res in resTuple:
    print(res)
#先关闭游标
cursor.close()
#再关闭数据库
con.close()
print('SQL执行成功')

#输出结果:
(1,'tom',18)
(3,'kongsh',20)
(4,'wen',20)

备注:从exceute()函数结果中获取游标所在处的size条数据,并以元组的形式返回,
元组的每一个元素都也是一个由一行数据组成的元组,如果size大于有效的结果行数,
将会返回cursor.arraysize条数据,但如果游标所在处没有数据,将返回空元组。
查询几条数据,游标将会向下移动几个位置。fetmany()函数必须跟exceute()函数结合使用,
并且在exceute()函数之后使用

fetchall:

import pymysql
#打开数据库连接,不指定数据库
conn = pymysql.connect('locahost',user='root',passwd='123456',charset='utf-8')
#选择需要连接的数据库
conn.select_db('testdb')   
cusor = conn.cursor      #获取游标
cur.execute("select * from user")
resTuple = cur.fetchall()
print("共%d条数据"%len(resTuple))
#先关闭游标
cursor.close()
#再关闭数据库
con.close()
print('SQL执行成功')

更新数据:

更新单条数据:

import pymysql
#打开数据库连接,不指定数据库
conn = pymysql.connect('locahost',user='root',passwd='123456',charset='utf-8')
#选择需要连接的数据库
conn.select_db('testdb')   
cusor = conn.cursor      #获取游标
#更新一条数据
update = cur.execute("update user set age=100 where name='kongsh'")
print ('修改后受影响的行数为:',update)
#查询一条数据
cur.execute('select * from user where name="kongsh";')
print(cur.fetchone())
#先关闭游标
cursor.close()
#再关闭数据库
con.close()
print('SQL执行成功')

更新多条数据:

import pymysql

conn = pymysql.connect("localhost",'root','123456',charset='utf-8')
conn.select_db("testdb")
cursor = conn.cursor()
#更新前查询所有数据
cur.execute("select * from user where name in ('kongsh','wen');")
for res in cur.fetchall():
    print(res)

#更新两条数据
sql = update user set age=%s where name=%s
update = cur.executemany(sql,[(15,'kongsh'),(18,'wen')])
cur.execute()
#更新2条数据后查询所有数据
cur.execute("select * from user where name in ('kongsh','wen');")
print('更新后的数据为:')
for res in cur.fetchall():
      print (res)


cur.close()
conn.commit()
conn.close()
print('sql执行成功')

删除数据:

删除单条数据:

import pymysql

conn = pymysql.connect("localhost",'root','123456',charset='utf-8')
conn.select_db("testdb")
cursor = conn.cursor()
#更新前查询所有数据
cur.execute("select * from user;")
print("删除前的数据为:")
for res in cur.fetchall():
    print(res)

#删除一条数据
sql = 'delete from user where id=1'
cur.execute()
#查询删除后的所有数据
cur.execute("select * from user")
print('更新后的数据为:')
for res in cur.fetchall():
      print (res)


cur.close()
conn.commit()
conn.close()
print('sql执行成功')

 

删除多条数据:

import pymysql

conn = pymysql.connect("localhost",'root','123456',charset='utf-8')
conn.select_db("testdb")
cursor = conn.cursor()
#更新前查询所有数据
cur.execute("select * from user;")
print("删除前的数据为:")
for res in cur.fetchall():
    print(res)

#删除两条数据
sql = 'delete from user where id=%s'
cur.executemany(sql,[(3),(4)])
#查询删除后的所有数据
cur.execute("select * from user")
print('更新后的数据为:')
for res in cur.fetchall():
      print (res)


cur.close()
conn.commit()
conn.close()
print('sql执行成功')

事务回滚:

import pymysql
#打开数据库连接
conn=pymysql.connect('localhost','root','123456')
conn.select_db('pythondb')
#获取游标
cur=conn.cursor()

#修改前查询所有数据
cur.execute("select * from user;")
print('修改前的数据为:')
for res in cur.fetchall():
      print (res)

print ('*'*40)      
#更新表中第1条数据
cur.execute("update user set name='xiaoxiaoxiaoxiaoren' where id=5")

#修改后查询所有数据
cur.execute("select * from user;")
print('修改后的数据为:')
for res in cur.fetchall():
      print (res)
print ('*'*40)
#回滚事务
conn.rollback()
cur.execute("select * from user;")
print('回滚事务后的数据为:')
for res in cur.fetchall():
      print (res)

cur.close()
conn.commit()
conn.close()
print('sql执行成功')

插入100条数据到数据库:

'''插入100条数据到数据库(每次插入一条)'''
import pymysql
import string,random
#打开数据库连接
conn=pymysql.connect('localhost','root','123456')
conn.select_db('testdb')
#获取游标
cur=conn.cursor()

#创建user表
cur.execute('drop table if exists user')
sql="""CREATE TABLE IF NOT EXISTS `user` (
      `id` int(11) NOT NULL AUTO_INCREMENT,
      `name` varchar(255) NOT NULL,
      `age` int(11) NOT NULL,
      PRIMARY KEY (`id`)
    ) ENGINE=InnoDB  DEFAULT CHARSET=utf8 AUTO_INCREMENT=0"""

cur.execute(sql)

#修改前查询所有数据
cur.execute("select * from user;")
print('修改前的数据为:')
for res in cur.fetchall():
      print (res)

print ('*'*40)      
#循环插入数据
words=list(string.ascii_letters)
sql="insert into user values(%s,%s,%s)"
for i in range(100):
      random.shuffle(words)#打乱顺序
      cur.execute(sql,(i+1,"".join(words[:5]),random.randint(0,80)))

#插入100条后查询所有数据
cur.execute("select * from user;")
print('修改后的数据为:')
for res in cur.fetchall():
      print (res)
print ('*'*40)

cur.close()
conn.commit()
conn.close()
print('sql执行成功')

一次插入多条:

'''插入100条数据到数据库(一次插入多条)'''
import pymysql
import string,random
#打开数据库连接
conn=pymysql.connect('localhost','root','123456')
conn.select_db('testdb')
#获取游标
cur=conn.cursor()

#创建user表
cur.execute('drop table if exists user')
sql="""CREATE TABLE IF NOT EXISTS `user` (
      `id` int(11) NOT NULL AUTO_INCREMENT,
      `name` varchar(255) NOT NULL,
      `age` int(11) NOT NULL,
      PRIMARY KEY (`id`)
    ) ENGINE=InnoDB  DEFAULT CHARSET=utf8 AUTO_INCREMENT=0"""

cur.execute(sql)

#修改前查询所有数据
cur.execute("select * from user;")
print('修改前的数据为:')
for res in cur.fetchall():
      print (res)

print ('*'*40)      
#循环插入数据
words=list(string.ascii_letters)
sql="insert into user values(%s,%s,%s)"
random.shuffle(words)#打乱顺序
cur.executemany(sql,[(i+1,"".join(words[:5]),random.randint(0,80)) for i in range(100) ])

#插入100条后查询所有数据
cur.execute("select * from user;")
print('修改后的数据为:')
for res in cur.fetchall():
      print (res)
print ('*'*40)

cur.close()
conn.commit()
conn.close()
print('sql执行成功')

 

 

"

标签:execute,cur,18,cursor,user,2022,print,conn
来源: https://www.cnblogs.com/Lily-Li/p/16389743.html

本站声明: 1. iCode9 技术分享网(下文简称本站)提供的所有内容,仅供技术学习、探讨和分享;
2. 关于本站的所有留言、评论、转载及引用,纯属内容发起人的个人观点,与本站观点和立场无关;
3. 关于本站的所有言论和文字,纯属内容发起人的个人观点,与本站观点和立场无关;
4. 本站文章均是网友提供,不完全保证技术分享内容的完整性、准确性、时效性、风险性和版权归属;如您发现该文章侵犯了您的权益,可联系我们第一时间进行删除;
5. 本站为非盈利性的个人网站,所有内容不会用来进行牟利,也不会利用任何形式的广告来间接获益,纯粹是为了广大技术爱好者提供技术内容和技术思想的分享性交流网站。

专注分享技术,共同学习,共同进步。侵权联系[81616952@qq.com]

Copyright (C)ICode9.com, All Rights Reserved.

ICode9版权所有