Warning: file_get_contents(/data/phpspider/zhask/data//catemap/7/sqlite/3.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Python sqlite数据库中的数据录入_Python_Sqlite - Fatal编程技术网

Python sqlite数据库中的数据录入

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

我是一个新用户,我还不擅长编码。我创建了一个包含3列的数据库:
(日期、车站、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()