如何确定是否已插入行?

时间:2012-11-09 18:15:37

标签: python sqlite

使用sqlite3进行python时,如何确定某行是否已成功插入表中? e.g。

conn = sqlite3.connect("test.db")
c = conn.cursor()

c.execute("INSERT INTO TEST VALUES ('sample text')")

c.commit()
c.close()

6 个答案:

答案 0 :(得分:8)

如果在调用execute()commit()时没有抛出任何异常,则在您调用commit()时会插入该异常。

成功提交事务是数据库层保证将插入内容写入磁盘的保证。

答案 1 :(得分:3)

您可以获取所有行,并查看其中是否包含:

SELECT * FROM TEST

但是如果SQLite不起作用,SQLite会给你一个错误信息。

答案 2 :(得分:1)

插入前和插入后可以count()行。

答案 3 :(得分:1)

您可以尝试这样的方法来收到错误消息:

    try:
        c.execute("INSERT INTO TEST VALUES ('sample text')")
     except sqlite3.OperationalError, msg:
        print msg

答案 4 :(得分:0)

您应该在connection made(而不是conn上的cursor(所选数据库为conn = sqlite3.connect("test.db") c = conn.cursor() c.execute("INSERT INTO TEST VALUES ('sample text')") #commit the changes to db conn.commit() conn.close() )上进行提交。

import java.util.Base64
import javax.crypto.Cipher
import javax.crypto.spec.{IvParameterSpec, SecretKeySpec}
class Encryption {
val key = "enIntVecTest2020"
val initVector = "encryptionIntVec"

def encrypt(text: String): String = {

val  iv = new IvParameterSpec(initVector.getBytes("UTF-8"))
val  skeySpec = new SecretKeySpec(key.getBytes("UTF-8"), "AES")

val  cipher = Cipher.getInstance("AES/CBC/PKCS5PADDING")
cipher.init(Cipher.ENCRYPT_MODE, skeySpec, iv)

val  encrypted = cipher.doFinal(text.getBytes())
return Base64.getEncoder().encodeToString(encrypted)
}

def decrypt(text:String) :String={
val  iv = new IvParameterSpec(initVector.getBytes("UTF-8"))
val  skeySpec = new SecretKeySpec(key.getBytes("UTF-8"), "AES")

val  cipher = Cipher.getInstance("AES/CBC/PKCS5PADDING")
cipher.init(Cipher.DECRYPT_MODE, skeySpec, iv)
val  original = cipher.doFinal(Base64.getDecoder.decode(text))

new String(original)
}
}

val encryptobj = new Encryption()
val pwd = "#test@12345"
val result =encryptobj.encrypt(pwd)

答案 5 :(得分:0)

首先你应该在连接对象而不是游标上进行提交,即 conn.commit() 不是 c.commit()

然后可以检查光标上的lastrowid,判断conn.commit()后是否插入成功

c.lastrowid