我是一个新用户,我还不擅长编码。我创建了一个包含3列的数据库:(date, station, pcp )
。
l设置41_years_data
并使用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()
答案 0 :(得分:0)
我解决了这个问题并且它将日期,站点和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()
答案 1 :(得分:-6)
您的INSERT
声明
c.execute("INSERT INTO pcp VALUES(kdm,station,klm)")
包含保存数据值的变量名称。
您需要通过连接这些变量中的值来构造INSERT
语句。像这样。 (也许有一种更有效的方法,但我对python不太熟悉。)
insert_sql = 'INSERT INTO pcp(date,stations,pcp) VALUES( ' + kdm + ',' + station + ',' + klm + ')'
c.execute(insert_sql)
同时尝试找出查询参数而不是字符串连接,正如 @colonel Thirty 所述,您可能会将自己暴露给SQL注入。想想 Bobby Tables