Python sqlite数据库中的数据录入
我是一个新用户,我还不擅长编码。我创建了一个包含3列的数据库:Python sqlite数据库中的数据录入,python,sqlite,Python,Sqlite,我是一个新用户,我还不擅长编码。我创建了一个包含3列的数据库:(日期、车站、pcp)。 我有41年\u数据集并且通过使用for循环,我想将这些数据集插入数据库。我做得不对。当我运行代码时,它给出 "c.execute("INSERT INTO pcp VALUES(kdm,station,klm)") sqlite3.OperationalError: no such column: kdm" error. 我试过了,但没有成功 我的代码在下面 import sqlite3 from date
(日期、车站、pcp)
。
我有41年\u数据集
并且通过使用for
循环,我想将这些数据集插入数据库。我做得不对。当我运行代码时,它给出
"c.execute("INSERT INTO pcp VALUES(kdm,station,klm)")
sqlite3.OperationalError: no such column: kdm" error.
我试过了,但没有成功
我的代码在下面
import sqlite3
from datetime import date, datetime, timedelta
conn=sqlite3.connect("pcp.db")
c=conn.cursor()
pcp=open("p.txt")
station="1"
def create_table():
c.execute("CREATE TABLE IF NOT EXISTS pcp (date DATE,stations TEXT,pcp DOUBLE)")
def perdelta(start, end, delta):
curr = start
while curr < end:
yield curr
curr += delta
def data_entry():
for i in pcp:
k=print(i)
def data_entry2():
for a in perdelta(date(1979, 1, 1), date(2015, 1, 1), timedelta(days=1)):
b=print(a)
def dyn():
kdm=data_entry2()
klm=data_entry()
c.execute("INSERT INTO pcp(date,stations,pcp) VALUES(?,?,?)",( kdm,station,klm ))
conn.commit()
create_table()
dyn()
导入sqlite3
从日期时间导入日期、日期时间、时间增量
conn=sqlite3.connect(“pcp.db”)
c=连接光标()
pcp=打开(“p.txt”)
station=“1”
def create_table():
c、 执行(“如果不存在pcp,则创建表(日期、站点文本、pcp双精度)”)
def perdelta(开始、结束、增量):
curr=开始
当前<结束时:
收益率货币
电流+=增量
def数据_条目():
对于pcp中的i:
k=打印(i)
def data_entry2():
对于perdelta(日期(1979年1月1日)、日期(2015年1月1日)、时间差(天数=1日)):
b=打印(a)
def dyn():
kdm=数据输入2()
klm=数据输入()
c、 执行(“插入pcp(日期、车站、pcp)值(?、、?),(kdm、车站、klm))
康涅狄格州提交
创建_表()
dyn()
您的
插入
语句
c.execute("INSERT INTO pcp VALUES(kdm,station,klm)")
包含保存数据值的变量的名称
您需要通过连接这些变量中的值来构造INSERT
语句。像这样。(也许有更有效的方法,但我对python不太熟悉。)
另外,请尝试找出查询参数,而不是字符串连接,正如@collone所述,您可能会暴露于SQL注入。思考博比表
我解决了这个问题,它在pcp列中插入了日期、站点和pcp值,但我必须使用范围(1000(仅用于试用编号))。有什么建议可以改进我的代码吗
import sqlite3
from sqlite3 import *
from datetime import date, datetime, timedelta
conn=sqlite3.connect("pcp.db")
c=conn.cursor()
pcp=open("p.txt")
prr=open("date.txt","w")
station="1"
date_pcp=[]
pcp_values=[]
def create_table():
c.execute("CREATE TABLE IF NOT EXISTS pcp (date DATE,stations TEXT,pcp DOUBLE)")
def perdelta(start, end, delta):
curr = start
while curr < end:
yield curr
curr += delta
def data_entry():
for i in pcp:
pcp_values.append(i)
def data_entry2():
for a in perdelta(date(1979, 1, 1), date(2014, 7, 31), timedelta(days=1)):
date_pcp.append(a)
def dyn():
data_entry2()
data_entry()
for l in range(1000):
kdm=date_pcp[l]
klm=pcp_values[l]
c.execute("""INSERT INTO pcp(date,stations,pcp) VALUES(?,?,?)""",( kdm,station,klm ))
conn.commit()
create_table()
dyn()
导入sqlite3
从sqlite3导入*
从日期时间导入日期、日期时间、时间增量
conn=sqlite3.connect(“pcp.db”)
c=连接光标()
pcp=打开(“p.txt”)
prr=打开(“date.txt”,“w”)
station=“1”
日期\u pcp=[]
pcp_值=[]
def create_table():
c、 执行(“如果不存在pcp,则创建表(日期、站点文本、pcp双精度)”)
def perdelta(开始、结束、增量):
curr=开始
当前<结束时:
收益率货币
电流+=增量
def数据_条目():
对于pcp中的i:
pcp_值。附加(i)
def data_entry2():
对于perdelta(日期(1979年1月1日)、日期(2014年7月31日)、时间Delta(天数=1日)):
日期\u pcp.附加(a)
def dyn():
数据输入2()
数据输入()
对于范围(1000)内的l:
kdm=日期_pcp[l]
klm=pcp_值[l]
c、 执行(“插入pcp(日期、车站、pcp)值(?、、?)”、(kdm、车站、klm))
康涅狄格州提交
创建_表()
dyn()
您需要构建查询,并将变量
klm
、kdm
和station
的值替换到查询中,同时将它们作为字符串引用。感谢更正和l更正代码,但只有插入的station、date和pcp值保留为空。代码正常工作,没有错误。请使用查询参数!字符串连接很容易受到SQL注入的攻击,没有什么理由这么做。我知道这会发生。我不熟悉python,但是是的,你是对的。SQL注入将是一个需要解决的问题。
import sqlite3
from sqlite3 import *
from datetime import date, datetime, timedelta
conn=sqlite3.connect("pcp.db")
c=conn.cursor()
pcp=open("p.txt")
prr=open("date.txt","w")
station="1"
date_pcp=[]
pcp_values=[]
def create_table():
c.execute("CREATE TABLE IF NOT EXISTS pcp (date DATE,stations TEXT,pcp DOUBLE)")
def perdelta(start, end, delta):
curr = start
while curr < end:
yield curr
curr += delta
def data_entry():
for i in pcp:
pcp_values.append(i)
def data_entry2():
for a in perdelta(date(1979, 1, 1), date(2014, 7, 31), timedelta(days=1)):
date_pcp.append(a)
def dyn():
data_entry2()
data_entry()
for l in range(1000):
kdm=date_pcp[l]
klm=pcp_values[l]
c.execute("""INSERT INTO pcp(date,stations,pcp) VALUES(?,?,?)""",( kdm,station,klm ))
conn.commit()
create_table()
dyn()