更新时间:2019-09-18 15:39
数据库功能需要根据所要连接的数据库类型,导入不同的包。
。
使用sql server
,需要import pymssql
使用mysql
,需要import pymysql
使用oracle
,需要import cx_Oracle
连接数据库,返回对象
使用sql server
, 将对应的属性值填入
#conn = pymssql.connect(server, user, password, database)
conn = pymssql.connect('localhost','user_a','pwd_a','db_name_a')
使用my sql
conn = pymysql.connect(host='localhost', port=3333, user='root', passwd='pwd_a', db='db_name_a', charset='utf8')
数据库连接对象,主要用来调用close
方法断开连接。
断开数据库连接。
conn.close()
提交数据库修改。
conn.commit()
这是您用来与数据库进行交互的对象。
不要自己创建一个Cursor的实例。调用connections.Connection.cursor()
。
cursor = conn.cursor()
execute(query, args=None)
执行查询。
返回受影响的行数<int>
如果args是列表或元组,则%s可以用作查询中的占位符。如果args是字典,则%(name)可以用作查询中的占位符。
涉及数据修改需要commit
#例1
cursor.execute("select * from test")
result = cursor.fetchall()
print(result)
#例2
sql = "INSERT INTO `users` (`email`, `password`) VALUES (%s, %s)"
cursor.execute(sql, ('webmaster@python.org', 'very-secret'))
coon.commit()
executemany(query, args)
对多行数据进行插入或者替换,否则需要循环调用execute
。
返回受影响的行数<int>
cursor.executemany(
"INSERT INTO persons VALUES (%d, %s, %s)",
[(1, 'John Smith', 'John Doe'),
(2, 'Jane Doe', 'Joe Dog'),
(3, 'Mike T.', 'Sarah H.')])
conn.commit()
fetchone ()
取下一行数据。
row = cursor.fetchone()
print(row)
fetchall ()
取所有的数据。
返回二维数组。
data = cursor.fetchall()
print(data)
callproc(procname, args=())
执行存储过程,传入存储过程名,有需要可以传入要用的参数列。
cursor.callproc('FindPerson', ('Jane Doe',))
#连接数据库
conn = pymssql.connect('localhost','sa','xxxxxx','testdb')
#获得游标
cursor = conn.cursor()
#执行sql
cursor.execute("select * from test")
row_1 = cursor.fetchone()
row_2 = cursor.fetchall()
#输出一行数据
print(row_1)
#输出所有数据,二维数组
print(row_2)
#执行存储过程
cursor.execute("""
IF OBJECT_ID('persons', 'U') IS NOT NULL
DROP TABLE persons
CREATE TABLE persons (
id INT NOT NULL,
name VARCHAR(100),
salesrep VARCHAR(100),
PRIMARY KEY(id)
)
""")
conn.commit()
conn.close()
def start():
# host 连接的ip ,port 端口号 ,user 账号,passwd 密码, db 数据库名 ,charset 编码
conn = pymysql.connect(host='localhost', port=3306, user='root', passwd='123456', db='test_db', charset='utf8')
# 创建游标对象
cs = conn.cursor()
# 执行sql语句
cs.execute("DROP TABLE IF EXISTS EMPLOYEE")
# 创建表语句
sql = """CREATE TABLE EMPLOYEE (
FIRST_NAME CHAR(20) NOT NULL,
LAST_NAME CHAR(20),
AGE INT,
SEX CHAR(1),
INCOME INT)"""
cs.execute(sql)
# 插入数据语句
sql = "INSERT INTO employee(FIRST_NAME, \
LAST_NAME, AGE, SEX, INCOME) \
VALUES ('%s', '%s', %d, '%s', %d)" % ('Mac', 'Mohan', 20, 'M', 2000)
# 批量 插入SQL 语句
sql_many = "INSERT INTO employee(FIRST_NAME, \
LAST_NAME, AGE, SEX, INCOME) \
VALUES (%s, %s, %s, %s, %s)"
try:
# 执行插入一条数据的sql语句
cs.execute(sql)
# 执行批量插入数据的sql语句
cs.executemany(sql_many, [('Mac1', 'Mohan1', 21, 'M', 2001),('Mac2', 'Mohan2', 22, 'M', 2002)])
# 提交到数据库执行
conn.commit()
except Exception as e:
# 发生错误时回滚
rpa.logger.error("dberror:{}".format(e))
conn.rollback()
# 查询数据表中所有数据
cs.execute("SELECT * FROM EMPLOYEE")
# 取出一条数据,返回元祖
row1 = cs.fetchone()
print(row1)
# 查询数据表中所有数据,每次取完数据都要重新查询
cs.execute("SELECT * FROM EMPLOYEE")
# 取出所有数据,返回二维元祖
row2 = cs.fetchall()
print(row2)
cs.close()
conn.close()
在文档使用中是否遇到以下问题
更多建议
匿名提交