python~操作数据库

版权声明:本文为博主原创文章,未经博主允许不得转载。 https://blog.csdn.net/weixin_37579123/article/details/85218054

python连接数据库总结

1.连接oracle数据库

a.下载并安装64bit的Oracle和PLSQL,下载地址:

链接: https://pan.baidu.com/s/16DISSETVPvmsjjHJoK7K4A 提取码: r6rk

b.下载cx_Oracle:  py -3 -m pip install cx_Oracle

import cx_Oracle

db=cx_Oracle.connect('sms/123test@localhost/ora11g')   #连接oracle数据库

cursor = db.cursor ()                                  #创建游标cursor

cursor.execute ("select * from sms_captcha")           #执行sql语句

cursor.fetchone()              #获取一条记录,可通过死循环,直到获取的结果为空为止
#row = cursor.fetchone ()

cursor.fetchall()            #获取所有查询结果,然后再一行一行的迭代
rows=cursor.fetchall()
for row in rows:
       print (row[5])

cursor.execute("update sms_captcha s set s.captcha_code='123456' where s.id='123456'")
db.commit()         #更新数据库操作,提交事务

cursor.close()      #关闭游标

db.close ()         #关闭数据库连接

2.连接mysql数据库

a.下载地址:https://dev.mysql.com/downloads/windows/installer/        安装和配置环境变量(自行百度)

b.安装完成后:进入cmd窗口运行mysql -uroot -p,输入设置的密码即可进入本地mysql;退出mysql:ctrl+z+回车,或者exit

c.操作流程:

1.下载pymysql:py -3 -m pip install pymysql

2.连接数据库,获取游标

3.执行增删改查sql语句,提交事务;

4.关闭数据库连接

3.具体操作(以mysql为例,oracle操作同理)

(1)连接数据库,获取操作游标

#encoding:utf-8

import pymysql

# 打开数据库连接
conn = pymysql.connect(
    host = "127.0.0.1",
    port = 3306,
    user = "testuser",
    passwd = "testpasswd",
    db = "test",
    charset = "utf8")  

# 使用cursor()方法获取数据库的操作游标
cursor = conn.cursor()
print(cursor)
print(type(cursor))

(2)新建数据库

import pymysql

#增加处理异常操作
try:
    conn = pymysql.connect(
    host = "127.0.0.1",
    port = 3306,
    user = "testuser",
    passwd = "testpasswd"
    )

    cur = conn.cursor()
    cur.execute('CREATE DATABASE IF NOT EXISTS pythondb DEFAULT CHARSET utf8 COLLATE utf8_general_ci;')      #后缀ci:大小写不敏感   cs:大小写敏感
except pymysql.Error as e:
     print("Mysql Error %d: %s" % (e.args[0], e.args[1]))
finally:
    cur.close()
    conn.close()

(3)新建表结构

import pymysql

try:
    conn = pymysql.connect(
    host = "127.0.0.1",
    port = 3306,
    user = "testuser",
    passwd = "testpasswd"
    )

    conn.select_db('pythondb')    #选择pythonDB数据库
    cur = conn.cursor()           #获取游标
    cur.execute("drop table if exists User;")    #如果所建表已存在,删除重建
    cur.execute('''CREATE TABLE `User`(
               `id` int(11) DEFAULT NULL,
               `name` varchar(255) DEFAULT NULL,
               `password` varchar(255) DEFAULT NULL,
               `birthday` date DEFAULT NULL
                                   )ENGINE=innodb DEFAULT CHARSET=utf8;''')      #执行建表sql语句
except pymysql.Error as e:
     print("Mysql Error %d: %s" %(e.args[0], e.args[1]))
finally:
    cur.close()
    conn.close()

(4)添加单条数据

#coding=utf-8

import pymysql


conn = pymysql.connect(
     host = "127.0.0.1",
     port = 3306,
     user = "testuser",
     passwd = "testpasswd" ,
     db = "pythondb",
     charset = "utf8")

cursor = conn.cursor()

# 插入一条数据, cursor.execute()插入成功后,返回插入成功数据的条数,并赋值给insert
insert = cursor.execute("insert into user values(1,'Tom','123','1990-01-01')")
print(u"添加语句受影响的行数:", insert)   #insert 为int类型

# 另一种插入数据方法,通过格式字符串传入值,此方式可以防止sql注入(推荐此方法)
sql = "insert into user values(%s, %s, %s, %s)"
insert = cursor.execute(sql, (3,'lucy','efg','1993-02-01'))
print(u"添加语句受影响的行数:", insert)

cursor.close()
conn.commit()   # 提交事务
conn.close() 
print(u"sql语句执行成功!")

(5)添加多条数据

#coding=utf-8

import pymysql

conn = pymysql.connect(
host = "127.0.0.1",
port = 3306,
user = "testuser",
passwd = "testpasswd" ,
db = "pythondb",
charset = "utf8")

cursor = conn.cursor()
sql = "insert into user values(%s, %s, %s, %s)"
j=0
for i in range(100,201):
    cursor.execute(sql, (i,'lucy'+str(i),'efg'+str(i),str(1900+j)+'-02-01'))
    j+=1

print(u"添加语句受影响的行数:", j)

cursor.close()
conn.commit()
conn.close()

(6)随机生成数据

#coding=utf-8

import pymysql
import random
import time

def now():
    return time.strftime("%Y-%m-%d")

conn = pymysql.connect(
host = "127.0.0.1",
port = 3306,
user = "testuser",
passwd = "testpasswd" ,
db = "pythondb",
charset = "utf8")

cursor = conn.cursor()
for i in range(10,20):
    sql = "insert into user values(%s, %s, %s, %s)"
    cursor.execute(sql, (random.randint(1,10000),'lucy'+str(random.randint(1,10000)),'efg'+str(random.randint(1,10000)),now()))

cursor.close()
conn.commit()
conn.close()

(7)从数据库中取值,每次取一条,取出来的值是元组类型

#coding=utf-8

import pymysql

conn = pymysql.connect(
host = "127.0.0.1",
port = 3306,
user = "testuser",
passwd = "testpasswd" ,
db = "pythondb",
charset = "utf8")

cursor = conn.cursor()
cursor.execute("select * from user")
while True:
  res = cursor.fetchone()    
  if res is None:         #表示已经取完结果集
    break
  print(res)
  print(res[-1].strftime("%Y-%m-%d"))    #将读取到的时间格式化

cursor.close()
conn.close()

(8)从数据库中取值,指定数量/全部数量

#coding=utf-8

import pymysql

conn = pymysql.connect(
host = "127.0.0.1",
port = 3306,
user = "testuser",
passwd = "testpasswd" ,
db = "pythondb",
charset = "utf8")

cursor = conn.cursor()
cursor.execute("select * from user")

resTuple = cursor.fetchmany(2)    # 获取游标处两条数据
#resTuple = cursor.fetchall()     取所有的数据

print("结果集类型:", type(resTuple))
for i in resTuple:
  print(i)

cursor.close()
conn.close()

(9)更新一条数据

import pymysql

conn = pymysql.connect(
host = "127.0.0.1",
port = 3306,
user = "testuser",
passwd = "testpasswd" ,
db = "pythondb",
charset = "utf8")

cursor = conn.cursor()
update = cursor.execute("update user set password = 'Tom_test' where name='lucy5234'")
print("修改语句受影响的行数:", update)

cursor.execute("select * from user where name='lucy5234';")
print(cursor.fetchone())   #此时查询字段值还没更新,因为未提交事务

cursor.close()
conn.commit()   # 提交事务
conn.close()

(10)批量更新数据

#coding=utf-8

import pymysql

conn = pymysql.connect(
host = "127.0.0.1",
port = 3306,
user = "testuser",
passwd = "testpasswd" ,
db = "pythondb",
charset = "utf8")

cursor = conn.cursor()
query = cursor.execute("select * from user")  #返回数据的数量,为int类型
print("表中所有数据:")
for i in cursor.fetchall():
  print(i)                  

cursor.executemany("update user set password = %s where name=%s",
[('tomx2x','lucy5231'),('Tomx2x', 'lucy5965')])  #批量更新数据,注意后面是列表类型

cursor.close()
conn.commit()  
conn.close()

(11)删除一条数据

import pymysql

conn = pymysql.connect(
host = "127.0.0.1",
port = 3306,
user = "testuser",
passwd = "testpasswd" ,
db = "pythondb",
charset = "utf8")

cursor = conn.cursor()
query=cursor.execute("select * from user")
print (“删除前的数据个数”,query)
print("表中所有数据:")
for i in cursor.fetchall():
  print(i)

delete = cursor.execute("delete from user where name='lucy5905'")   # 删除数据
print("删除语句影响的行数:", delete)

conn.commit()
query=cursor.execute("select * from user")
print (“删除后的数据个数”,query)
for i in cursor.fetchall():
  print(i)

cursor.close()
conn.close()

(12)批量删除数据

import pymysql

conn = pymysql.connect(
host = "127.0.0.1",
port = 3306,
user = "testuser",
passwd = "testpasswd" ,
db = "pythondb",
charset = "utf8")

cursor = conn.cursor()
query=cursor.execute("select * from user")
print ("删除前的数据个数",query)
print("表中所有数据:")
for i in cursor.fetchall():
  print(i)

delete = cursor.executemany("delete from user where name=%s", [('amy',), ('lily',)]) #批量删除数据

conn.commit()
print("删除语句影响的行数:", delete)
query=cursor.execute("select * from user")
print ("删除后的数据个数",query)
for i in cursor.fetchall():
  print(i)

cursor.close()
conn.close()

(13)事务回滚:一定要在commit()之前执行,否则commit()后数据已经更新,操作回滚不会生效

#coding=utf-8

import pymysql

conn = pymysql.connect(
host = "127.0.0.1",
port = 3306,
user = "testuser",
passwd = "testpasswd" ,
db = "pythondb",
charset = "utf8")

cursor = conn.cursor()
cursor.execute("select * from user")
datas = cursor.fetchall()
print("修改前的数据:\n", datas[0])

cursor.execute("update user set birthday='2100-08-12' where name='lucy5234'")  # 更新数据表中第一条数据

conn.rollback()     # 回滚事务
cursor.execute("select * from user")
datas = cursor.fetchall()
print("事务回滚后的数据:\n", datas[0])

cursor.close()
conn.commit()
conn.close()

 

猜你喜欢

转载自blog.csdn.net/weixin_37579123/article/details/85218054