使用sqlite3进行python时,如何确定某行是否已成功插入表中? e.g。
conn = sqlite3.connect("test.db")
c = conn.cursor()
c.execute("INSERT INTO TEST VALUES ('sample text')")
c.commit()
c.close()
答案 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