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的sqlite3psycopg2等数据库模块中,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 属性给出了受上一次INSERTUPDATEDELETE影响的行数,对于SELECT,它在大多数数据库适配器中为-1或None,直到所有行被获取。
  • 去除换行符:使用字符串的 .rstrip('\n') 方法。这会移除字符串末尾的换行符。如果字段中可能有其他空白字符(如空格、制表符),并且你想一并移除,可以使用 .rstrip() 无参数形式。注意,.rstrip() 只移除末尾字符,字符串中间的换行符不受影响。

总结建议:用rowcount检查影响行数,用.rstrip('\n')清理字段值。

刚开始学 python,不知道怎么写的简洁,用上最多的轮子。。。

cursor.rowcount()这个,查看受影响的行数

太棒了。谢谢。

貌似这个没有办法看到错误的信息。

回到顶部