496339041 发表于 2022-4-28 23:41:34

python从csv文件中读取数据到数据库

各位大佬好,本人在使用python将csv文件读取到sqlite3数据库中已经建好的表的时候,出现了这个错误:sqlite3.OperationalError: near "to": syntax error,想询问是什么原因,
随贴截取部分csv文件的信息如下
Time        Source        Destination        Protocol        Length        Source Port        Destination Port        Info
0        192.168.1.20        192.168.1.50        TCP        60        56790        44818        56790>44818 Seq=1 Ack=1 Win=7922 Len=0
0        192.168.1.50        192.168.1.40        CIP        116        44818        55872        Success: Service (0x4c)
0.000135        192.168.1.40        192.168.1.50        TCP        60        55872        44818        55872>44818 Seq=1 Ack=63 Win=8130 Len=0
0.000186        192.168.1.20        192.168.1.30        CIP        116        56784        44818        'HMI_LIT301' - Service (0x4c)
0.000291        192.168.1.20        192.168.1.30        CIP        116        56784        44818        'HMI_FIT301' - Service (0x4c)
0.000291        192.168.1.30        192.168.1.20        TCP        60        44818        56784        44818>56784 Seq=1 Ack=63 Win=8130 Len=0
0.000292        192.168.1.20        192.168.1.30        CIP        116        56784        44818        'HMI_MV301' - Service (0x4c)
0.000396        192.168.1.30        192.168.1.20        TCP        60        44818        56784        44818>56784 Seq=1 Ack=125 Win=8068 Len=0
0.000396        192.168.1.60        192.168.1.20        CIP I/O        86                        Connection: ID=0x00F7464A, SEQ=0042190992
0.000396        192.168.1.30        192.168.1.20        TCP        60        44818        56784        44818>56784 Seq=1 Ack=187 Win=8006 Len=0
0.000584        192.168.1.20        192.168.1.30        CIP        110        44818        56706        Success: Service (0x4c)
0.000667        192.168.1.30        192.168.1.20        TCP        60        56706        44818        56706>44818 Seq=1 Ack=57 Win=8136 Len=0
0.00123        192.168.1.10        192.168.1.60        CIP        128        64520        44818        'HMI_PLANT_AUTO' - Service (0x4d)
0.001341        192.168.1.60        192.168.1.10        TCP        60        44818        64520        44818>64520 Seq=1 Ack=75 Win=8118 Len=0
0.001342        192.168.1.10        192.168.1.20        CIP        124        64512        44818        'HMI_P2_PERMISSIVE' - Service (0x4c)
0.001434        192.168.1.10        239.192.2.63        CIP I/O        98                        Connection: ID=0x00708000, SEQ=0008698356

以下是我的代码
import sqlite3
import csv

#数据库连接,建表
conn = sqlite3.connect('networkInfo.db')
cs = conn.cursor()
# cs.execute('''create table netInfo(
#             Time,
#             Source text,
#             Destination text,
#             Protocol text,
#             Length integer,
#             Source_Port text,
#             Destination_port text,
#             Info text
# )''')

with open('netInfo.csv') as f:
    reader = csv.reader(f)
    for row in reader:
        #跳过第一行表头部分
      if row == 'Source':
            continue
      #print(row)
      cs.execute(f'insert to netInfo values("{row}","{row}","{row}","{row}","{row}","{row}","{row}","{row}")')
    conn.commit()
conn.close()

wp231957 发表于 2022-4-29 09:15:45

不是insert into吗

Twilight6 发表于 2022-4-29 10:29:02



楼上正解吧,插入 SQL 语句写错了 是 insert into ,你写成了 to

496339041 发表于 2022-4-29 14:26:15

wp231957 发表于 2022-4-29 09:15
不是insert into吗

修改为into以后会报这个错sqlite3.OperationalError: near "QM": syntax error,我在csv文件中查找出那一项是Standard query 0x0000 PTR _ipps._tcp.local, "QM" question PTR _ipp._tcp.local, "QM" question,好像是数据本身有双引号的问题,不知道如何修改

496339041 发表于 2022-4-29 14:28:21

Twilight6 发表于 2022-4-29 10:29
楼上正解吧,插入 SQL 语句写错了 是 insert into ,你写成了 to

修改为into以后会报这个错sqlite3.OperationalError: near "QM": syntax error,我在csv文件中查找出那一项是Standard query 0x0000 PTR _ipps._tcp.local, "QM" question PTR _ipp._tcp.local, "QM" question,好像是数据本身有双引号的问题,不知道如何修改

wp231957 发表于 2022-4-29 14:30:30

496339041 发表于 2022-4-29 14:28
修改为into以后会报这个错sqlite3.OperationalError: near "QM": syntax error,我在csv文件中查找出那一 ...

除非你把excel或者csv发出来

Twilight6 发表于 2022-4-29 14:42:41

本帖最后由 Twilight6 于 2022-4-29 14:51 编辑

496339041 发表于 2022-4-29 14:28
修改为into以后会报这个错sqlite3.OperationalError: near "QM": syntax error,我在csv文件中查找出那一 ...


会不会是你 insert 引号加多了,试试这样,把第 1 列和第 4 列引号去了?

f'insert to netInfo values({row},"{row}","{row}",{row},"{row}","{row}","{row}","{row}")'

496339041 发表于 2022-4-29 15:13:54

Twilight6 发表于 2022-4-29 14:42
会不会是你 insert 引号加多了,试试这样,把第 1 列和第 4 列引号去了?

我草,ok了大佬,非常感谢!

496339041 发表于 2022-4-29 15:16:30

Twilight6 发表于 2022-4-29 14:42
会不会是你 insert 引号加多了,试试这样,把第 1 列和第 4 列引号去了?

看错了大佬,还是会报类似的错误sqlite3.OperationalError: near "to": syntax error

Twilight6 发表于 2022-4-29 15:18:28

496339041 发表于 2022-4-29 15:16
看错了大佬,还是会报类似的错误sqlite3.OperationalError: near "to": syntax error

哈哈我拷贝你的代码,忘记把 to 改成 into 了

f'insert into netInfo values({row},"{row}","{row}",{row},"{row}","{row}","{row}","{row}")'

496339041 发表于 2022-4-29 15:20:32

wp231957 发表于 2022-4-29 14:30
除非你把excel或者csv发出来

大佬,我不知道怎么把那个csv文件发上来,想转pdf然后发链接但是那个文件太大了

496339041 发表于 2022-4-29 15:22:03

Twilight6 发表于 2022-4-29 15:18
哈哈我拷贝你的代码,忘记把 to 改成 into 了

有进展了大佬,报了新的错误sqlite3.OperationalError: no such column: TCP

496339041 发表于 2022-4-29 15:25:53

Twilight6 发表于 2022-4-29 14:42
会不会是你 insert 引号加多了,试试这样,把第 1 列和第 4 列引号去了?

是要去掉第一列未指定类型的time和第五列整形的length的双引号吗,这俩是row0和row4

Twilight6 发表于 2022-4-29 15:28:21

496339041 发表于 2022-4-29 15:22
有进展了大佬,报了新的错误sqlite3.OperationalError: no such column: TCP



好吧,这好像是因为不加引号引起的,没怎么用过 Python 连接数据库抱歉哈,最后试试这个看看:

f"insert into netInfo values('{row}','{row}','{row}','{row}','{row}','{row}','{row}','{row}')"

496339041 发表于 2022-4-29 15:35:30

Twilight6 发表于 2022-4-29 15:28
好吧,这好像是因为不加引号引起的,没怎么用过 Python 连接数据库抱歉哈,最后试试这个看看:




不行,但是非常谢谢大佬了{:5_96:}

wp231957 发表于 2022-4-29 15:35:31

496339041 发表于 2022-4-29 15:20
大佬,我不知道怎么把那个csv文件发上来,想转pdf然后发链接但是那个文件太大了

如果你实在搞不定,可以把部分文件记录打包rar
发出来,大家帮你研究

496339041 发表于 2022-4-29 15:57:39

wp231957 发表于 2022-4-29 15:35
如果你实在搞不定,可以把部分文件记录打包rar
发出来,大家帮你研究

稍等大佬,我在研究怎么把这个zip传上来

496339041 发表于 2022-4-29 16:11:26

wp231957 发表于 2022-4-29 15:35
如果你实在搞不定,可以把部分文件记录打包rar
发出来,大家帮你研究

链接:https://pan.baidu.com/s/1DUcbFuh--f7-aplt8577FQ
提取码:vmo1
--来自百度网盘超级会员V4的分享

496339041 发表于 2022-4-29 18:46:07

wp231957 发表于 2022-4-29 15:35
如果你实在搞不定,可以把部分文件记录打包rar
发出来,大家帮你研究

已经解决了大佬,用?当占位符就好了
页: [1]
查看完整版本: python从csv文件中读取数据到数据库