import sqlite3
conn = sqlite3.connect("test.db")
cursor = conn.cursor()
print('Connect ok')
#建立表
cursor.execute(
'''CREATE TABLE HUMAN
(ID INT PRIMARY KEY NOT NULL,
NAME TEXT NOT NULL,
AGE INT NOT NULL);''')
print('Table created.')
conn.commit()
#新增資料
cursor.execute("INSERT INTO HUMAN (ID,NAME,AGE) VALUES (?,?,?)",(1, 'Wendy', 16))
不知道為什麼
無法寫入
這是正常現象嗎?
還是我的程式碼問題?
#!/usr/local/bin/python3
import sqlite3
conn = sqlite3.connect("test.db")
cursor = conn.cursor()
print('Connect ok')
#建立表
cursor.execute(
'''CREATE TABLE HUMAN
(ID INT PRIMARY KEY NOT NULL,
NAME TEXT NOT NULL,
AGE INT NOT NULL);''')
print('Table created.')
conn.commit()
#新增資料
cursor.execute("INSERT INTO HUMAN (ID,NAME,AGE) VALUES (1,?,?)",('Wendy', 16))
conn.commit()
conn.close()
後面要補上 commit, 另外要記得 close.
沒想到連 sqlite3 這種迷你資料庫也難不倒您
我後面有很多不相關的
在測試時都刪掉
然後就誤刪了……
想問一下
那個問號能夠用f-string之類的寫法嗎
他變數只能用問號嗎
#!/usr/local/bin/python3
import sqlite3
conn = sqlite3.connect("test.db")
cursor = conn.cursor()
cursor.execute("INSERT INTO HUMAN (ID,NAME,AGE) VALUES (2,'測試',17)")
id = 3
iname = 'fstring'
iage = 18
stmt = f"INSERT INTO HUMAN (ID,NAME,AGE) VALUES ({id}, '{iname}', {iage})"
print(stmt)
cursor.execute(stmt)
conn.commit()
conn.close()
原來字串還是要打冒號
感謝
那個問號能夠用f-string之類的寫法嗎
字串拼接的方式要注意sql injection。
https://docs.python.org/zh-tw/3/library/sqlite3.html
通常你的 SQL 操作需要使用一些 Python 变量的值。你不应该使用 Python 的字符串操作来创建你的查询语句,因为那样做不安全;它会使你的程序容易受到 SQL 注入攻击(在 https://xkcd.com/327/ 上有一个搞笑的例子,看看有什么后果)
推荐另外一种方法:使用 DB-API 的参数替换。在你的 SQL 语句中,使用 ? 占位符来代替值,然后把对应的值组成的元组做为 execute() 方法的第二个参数。
也就是一開始一級屠豬士大提供的方式。