Python中cur.execute()如何获取执行成功信息及去除行尾换行符?
比如 cur.execute(copy talbe from test.txt)?这个怎么知道 copy 了多少 line 呢? 另外就是想按照分节符把一行拆开,然后 insert 到数据库,如何优雅得去掉行尾得换行符? strip ?貌似有帖子说如果是中文,会有 bug 存在。 大神赐教哈,感觉没法把 python 写的简练。
Python中cur.execute()如何获取执行成功信息及去除行尾换行符?
6 回复
优雅不知道,我都是 str.replac (“ ”,“”).replac (“\r “,””)加一堆
在Python的sqlite3或psycopg2等数据库模块中,cur.execute()执行成功本身不直接返回一个“成功信息”对象。通常,如果SQL语句执行没有抛出异常,就认为成功了。要获取受影响的行数等信息,可以使用游标对象的rowcount属性。
对于查询(如SELECT),你需要用cur.fetchone()、cur.fetchall()或迭代游标来获取数据。从数据库获取的字符串字段可能包含换行符\n,你可以用Python字符串的.rstrip('\n')方法去除行尾的换行符。
下面是一个完整的示例,展示了执行INSERT、检查影响行数、执行SELECT并清理数据的过程:
import sqlite3
# 连接到数据库(这里以SQLite内存数据库为例)
conn = sqlite3.connect(':memory:')
cur = conn.cursor()
# 创建示例表
cur.execute('''CREATE TABLE test (id INTEGER PRIMARY KEY, content TEXT)''')
# 1. 执行INSERT并获取“成功信息”(通过rowcount)
insert_sql = "INSERT INTO test (content) VALUES (?)"
# 假设我们插入一个可能带换行符的字符串
data_to_insert = ("这是第一行内容\n",)
cur.execute(insert_sql, data_to_insert)
print(f"INSERT 影响的行数: {cur.rowcount}") # 输出: 1
# 提交事务
conn.commit()
# 2. 执行SELECT查询并获取数据,同时去除字段值的行尾换行符
cur.execute("SELECT id, content FROM test")
rows = cur.fetchall()
cleaned_rows = []
for row in rows:
# row 是一个元组,例如 (1, "这是第一行内容\n")
cleaned_row = (row[0], row[1].rstrip('\n')) # 去除content字段的尾随换行符
cleaned_rows.append(cleaned_row)
print("清理后的数据:")
for r in cleaned_rows:
print(r) # 输出: (1, '这是第一行内容')
# 关闭连接
cur.close()
conn.close()
关键点解释:
- 执行成功判断:
cur.execute()不抛出异常即表示执行成功。rowcount属性给出了受上一次INSERT、UPDATE或DELETE影响的行数,对于SELECT,它在大多数数据库适配器中为-1或None,直到所有行被获取。 - 去除换行符:使用字符串的
.rstrip('\n')方法。这会移除字符串末尾的换行符。如果字段中可能有其他空白字符(如空格、制表符),并且你想一并移除,可以使用.rstrip()无参数形式。注意,.rstrip()只移除末尾字符,字符串中间的换行符不受影响。
总结建议:用rowcount检查影响行数,用.rstrip('\n')清理字段值。
刚开始学 python,不知道怎么写的简洁,用上最多的轮子。。。
cursor.rowcount()这个,查看受影响的行数
太棒了。谢谢。
貌似这个没有办法看到错误的信息。

