全部产品
云市场

数据库操作

更新时间:2019-09-18 15:39:40

目录

数据库功能

数据库功能需要根据所要连接的数据库类型,导入不同的包。

使用sql server,需要import pymssql
使用mysql,需要import pymysql
使用oracle,需要import cx_Oracle

connect

连接数据库,返回对象

使用sql server, 将对应的属性值填入

  1. #conn = pymssql.connect(server, user, password, database)
  2. conn = pymssql.connect('localhost','user_a','pwd_a','db_name_a')

使用my sql

  1. conn = pymysql.connect(host='localhost', port=3333, user='root', passwd='pwd_a', db='db_name_a', charset='utf8')

Class: connection

数据库连接对象,主要用来调用close方法断开连接。

close

断开数据库连接。

  1. conn.close()

commit

提交数据库修改。

  1. conn.commit()

Class: cursor

这是您用来与数据库进行交互的对象。

不要自己创建一个Cursor的实例。调用connections.Connection.cursor()

  1. cursor = conn.cursor()

execute

execute(query, args=None)

执行查询。
返回受影响的行数<int>

如果args是列表或元组,则%s可以用作查询中的占位符。如果args是字典,则%(name)可以用作查询中的占位符。

涉及数据修改需要commit

  1. #例1
  2. cursor.execute("select * from test")
  3. result = cursor.fetchall()
  4. print(result)
  5. #例2
  6. sql = "INSERT INTO `users` (`email`, `password`) VALUES (%s, %s)"
  7. cursor.execute(sql, ('webmaster@python.org', 'very-secret'))
  8. coon.commit()

executemany

executemany(query, args)

对多行数据进行插入或者替换,否则需要循环调用execute
返回受影响的行数<int>

  1. cursor.executemany(
  2. "INSERT INTO persons VALUES (%d, %s, %s)",
  3. [(1, 'John Smith', 'John Doe'),
  4. (2, 'Jane Doe', 'Joe Dog'),
  5. (3, 'Mike T.', 'Sarah H.')])
  6. conn.commit()

fetchone

fetchone ()

取下一行数据。

  1. row = cursor.fetchone()
  2. print(row)

fetchall

fetchall ()

取所有的数据。
返回二维数组。

  1. data = cursor.fetchall()
  2. print(data)

callproc

callproc(procname, args=())

执行存储过程,传入存储过程名,有需要可以传入要用的参数列。

  1. cursor.callproc('FindPerson', ('Jane Doe',))

最佳实现

  1. #连接数据库
  2. conn = pymssql.connect('localhost','sa','xxxxxx','testdb')
  3. #获得游标
  4. cursor = conn.cursor()
  5. #执行sql
  6. cursor.execute("select * from test")
  7. row_1 = cursor.fetchone()
  8. row_2 = cursor.fetchall()
  9. #输出一行数据
  10. print(row_1)
  11. #输出所有数据,二维数组
  12. print(row_2)
  13. #执行存储过程
  14. cursor.execute("""
  15. IF OBJECT_ID('persons', 'U') IS NOT NULL
  16. DROP TABLE persons
  17. CREATE TABLE persons (
  18. id INT NOT NULL,
  19. name VARCHAR(100),
  20. salesrep VARCHAR(100),
  21. PRIMARY KEY(id)
  22. )
  23. """)
  24. conn.commit()
  25. conn.close()

pymysql最佳实现

  1. def start():
  2. # host 连接的ip ,port 端口号 ,user 账号,passwd 密码, db 数据库名 ,charset 编码
  3. conn = pymysql.connect(host='localhost', port=3306, user='root', passwd='123456', db='test_db', charset='utf8')
  4. # 创建游标对象
  5. cs = conn.cursor()
  6. # 执行sql语句
  7. cs.execute("DROP TABLE IF EXISTS EMPLOYEE")
  8. # 创建表语句
  9. sql = """CREATE TABLE EMPLOYEE (
  10. FIRST_NAME CHAR(20) NOT NULL,
  11. LAST_NAME CHAR(20),
  12. AGE INT,
  13. SEX CHAR(1),
  14. INCOME INT)"""
  15. cs.execute(sql)
  16. # 插入数据语句
  17. sql = "INSERT INTO employee(FIRST_NAME, \
  18. LAST_NAME, AGE, SEX, INCOME) \
  19. VALUES ('%s', '%s', %d, '%s', %d)" % ('Mac', 'Mohan', 20, 'M', 2000)
  20. # 批量 插入SQL 语句
  21. sql_many = "INSERT INTO employee(FIRST_NAME, \
  22. LAST_NAME, AGE, SEX, INCOME) \
  23. VALUES (%s, %s, %s, %s, %s)"
  24. try:
  25. # 执行插入一条数据的sql语句
  26. cs.execute(sql)
  27. # 执行批量插入数据的sql语句
  28. cs.executemany(sql_many, [('Mac1', 'Mohan1', 21, 'M', 2001),('Mac2', 'Mohan2', 22, 'M', 2002)])
  29. # 提交到数据库执行
  30. conn.commit()
  31. except Exception as e:
  32. # 发生错误时回滚
  33. rpa.logger.error("dberror:{}".format(e))
  34. conn.rollback()
  35. # 查询数据表中所有数据
  36. cs.execute("SELECT * FROM EMPLOYEE")
  37. # 取出一条数据,返回元祖
  38. row1 = cs.fetchone()
  39. print(row1)
  40. # 查询数据表中所有数据,每次取完数据都要重新查询
  41. cs.execute("SELECT * FROM EMPLOYEE")
  42. # 取出所有数据,返回二维元祖
  43. row2 = cs.fetchall()
  44. print(row2)
  45. cs.close()
  46. conn.close()