python中cursor操作数据库

坚持每天学一点,每天积累一点点,作为自己每天的业余收获,这个文章是我在吃饭的期间写的,利用自己零散的时间学了一下python操作MYSQL,所以整理一下。

我采用的是MySQLdb操作的MYSQL数据库。先来一个简单的例子吧:

?
1
2
3
4
5
6
7
8
9
10
import MySQLdb
try:
    conn=MySQLdb.connect(host='localhost',user='root',passwd='root',db='test',port=3306)
    cur=conn.cursor()
    cur.execute('select * from user')
    cur.close()
    conn.close()
except MySQLdb.Error,e:
     print "Mysql Error %d: %s" % (e.args[0], e.args[1])

  请注意修改你的数据库,主机名,用户名,密码。

下面来大致演示一下插入数据,批量插入数据,更新数据的例子吧:

?
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
import MySQLdb
try:
    conn=MySQLdb.connect(host='localhost',user='root',passwd='root',port=3306)
    cur=conn.cursor()
   
    cur.execute('create database if not exists python')
    conn.select_db('python')
    cur.execute('create table test(id int,info varchar(20))')
   
    value=[1,'hi rollen']
    cur.execute('insert into test values(%s,%s)',value)
   
    values=[]
    for i in range(20):
        values.append((i,'hi rollen'+str(i)))
       
    cur.executemany('insert into test values(%s,%s)',values)
    cur.execute('update test set info="I am rollen" where id=3')
    conn.commit()
    cur.close()
    conn.close()
except MySQLdb.Error,e:
     print "Mysql Error %d: %s" % (e.args[0], e.args[1])

  请注意一定要有conn.commit()这句来提交事务要不然不能真正的插入数据。

运行之后我的MySQL数据库的结果就不上图了。

?
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
import MySQLdb
try:
    conn=MySQLdb.connect(host='localhost',user='root',passwd='root',port=3306)
    cur=conn.cursor()
   
    conn.select_db('python')
    count=cur.execute('select * from test')
    print 'there has %s rows record' % count
    result=cur.fetchone()
    print result
    print 'ID: %s info %s' % result
    results=cur.fetchmany(5)
    for r in results:
        print r
    print '=='*10
    cur.scroll(0,mode='absolute')
    results=cur.fetchall()
    for r in results:
        print r[1]
   
    conn.commit()
    cur.close()
    conn.close()
except MySQLdb.Error,e:
     print "Mysql Error %d: %s" % (e.args[0], e.args[1])

  运行结果就不贴了,太长了。

查询后中文会正确显示,但在数据库中却是乱码的。经过我从网上查找,发现用一个属性有可搞定:

在Python代码

conn = MySQLdb.Connect(host='localhost', user='root', passwd='root', db='python') 中加一个属性:
改为:
conn = MySQLdb.Connect(host='localhost', user='root', passwd='root', db='python',charset='utf8')
charset是要跟你数据库的编码一样,如果是数据库是gb2312 ,则写charset='gb2312'。

下面贴一下常用的函数:

然后,这个连接对象也提供了对事务操作的支持,标准的方法
commit() 提交
rollback() 回滚

cursor用来执行命令的方法:
callproc(self, procname, args):用来执行存储过程,接收的参数为存储过程名和参数列表,返回值为受影响的行数
execute(self, query, args):执行单条sql语句,接收的参数为sql语句本身和使用的参数列表,返回值为受影响的行数
executemany(self, query, args):执行单挑sql语句,但是重复执行参数列表里的参数,返回值为受影响的行数
nextset(self):移动到下一个结果集

cursor用来接收返回值的方法:
fetchall(self):接收全部的返回结果行.
fetchmany(self, size=None):接收size条返回结果行.如果size的值大于返回的结果行的数量,则会返回cursor.arraysize条数据.
fetchone(self):返回一条结果行.
scroll(self, value, mode='relative'):移动指针到某一行.如果mode='relative',则表示从当前所在行移动value条,如果 mode='absolute',则表示从结果集的第一行移动value条.

### Python 中使用 Cursor 操作数据库的应用案例 #### 导入必要的库并建立连接 为了在 Python操作 SQLite 或 MySQL 数据库,需要先导入相应的库。对于 SQLite 可以直接使用内置的 `sqlite3` 模块;而对于 MySQL,则可以采用第三方库如 `PyMySQL`。 ```python import sqlite3 # 对于SQLite数据库 # import pymysql # 如果是MySQL数据库则取消此行注释 ``` #### 建立与数据库的连接 创建一个到目标数据库的新连接对象。这里展示如何针对不同类型的数据库执行这一过程: - **SQLite** ```python conn = sqlite3.connect('example.db') ``` - **MySQL** ```python # conn = pymysql.connect(host='localhost', user='root', password='', database='testdb') ``` #### 获取游标对象 通过调用连接对象上的 `.cursor()` 方法来获取一个新的游标实例用于后续的操作[^1]。 ```python cur = conn.cursor() ``` #### 执行 SQL 查询 利用游标的 `.execute()` 方法发送 SQL 语句给服务器端处理,并接收返回的结果集或者影响记录数等反馈信息[^3]。 ##### 插入数据的例子 下面是一段向名为 `login` 的表里插入一条新纪录的具体实现方式: ```python sql_insert_query = "INSERT INTO login (username, password) VALUES (%s, %s)" data_tuple = ('admin', '123123') cur.execute(sql_insert_query, data_tuple) # 提交更改至数据库 conn.commit() print(f"{cur.rowcount} record inserted.") ``` #### 判断特定表格的存在性 有时可能希望确认某个具体的表是否存在于当前使用的数据库之中,在这种情况下可借助自定义辅助函数完成这项工作[^4]。 ```python def check_table_existence(cursor, table_name): result = cursor.execute( f"SELECT name FROM sqlite_master WHERE type='table' AND name='{table_name}'").fetchone() return True if result else False ``` 注意上述例子适用于 SQLite 数据库环境下的情况。如果是其他类型的 RDBMS 如 MySQL,则需调整对应的元数据查询语法。 #### 关闭资源释放 最后不要忘记关闭游标以及断开同数据库之间的链接,以此确保程序结束时不会遗留任何未清理的资源占用问题。 ```python cur.close() conn.close() ```
评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值