鱼C论坛

 找回密码
 立即注册
查看: 1703|回复: 8

怎么把用户输入的数据写入数据库

[复制链接]
发表于 2022-5-9 22:02:16 | 显示全部楼层 |阅读模式

马上注册,结交更多好友,享用更多功能^_^

您需要 登录 才可以下载或查看,没有账号?立即注册

x
import easygui as e
import sqlite3
msg = '【*真实姓名】为必填项。''\n''【*手机号码】为必填项。''\n''【*E-mail】为必填项。'
title = '账号中心'
fields = ['*用户名','*真实姓名','固定电话','*手机号码','QQ','*E-mail']
counter = e.multenterbox(msg,title,fields)
conn = sqlite3.connect('用户表.db')


c = conn.cursor()
sql = '''
    create table 用户信息表
     (用户名 varchar(10) primary key,
     真实姓名 varchar(10),
     固定电话 int,
     手机号码 int,
     QQ int,
     'E-mail' varchar(30)
    );

'''
conn.execute(sql)
conn.commit()
for each in counter:

    sql = '''
        inser into company(用户名,真实姓名,固定电话,手机号码,QQ,'E-mail')
        values( )'''#此处的sql语句应该怎么书写
    conn.execute(sql)
    conn.commit()
conn.close()
还有就是重复执行此代码时,表已经存在了,应该怎么修改才能执行时不报错(table already exist)
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复

使用道具 举报

发表于 2022-5-10 06:40:56 From FishC Mobile | 显示全部楼层
表信息我们一般都是事先建好,很少由用户代码来创建
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2022-5-10 06:55:34 | 显示全部楼层

create table if not exists 只有在表不存在的时候才创建
import easygui as e
import sqlite3
msg = '【*真实姓名】为必填项。''\n''【*手机号码】为必填项。''\n''【*E-mail】为必填项。'
title = '账号中心'
fields = ['*用户名','*真实姓名','固定电话','*手机号码','QQ','*E-mail']
counter = e.multenterbox(msg,title,fields)
conn = sqlite3.connect('用户表.db')


c = conn.cursor()
sql = '''
    create table if not exists 用户信息表
     (用户名 varchar(10) primary key,
     真实姓名 varchar(10),
     固定电话 int,
     手机号码 int,
     QQ int,
     'E-mail' varchar(30)
    );

'''
conn.execute(sql)
conn.commit()
sql = ("insert into 用户信息表(用户名,真实姓名,固定电话,手机号码,QQ,'E-mail')"
        f"values({','.join(map(repr, counter))})")

conn.execute(sql)
conn.commit()
conn.close()
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

 楼主| 发表于 2022-5-10 18:57:49 | 显示全部楼层
isdkz 发表于 2022-5-10 06:55
create table if not exists 只有在表不存在的时候才创建

看不太懂
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2022-5-10 18:59:08 | 显示全部楼层
本帖最后由 isdkz 于 2022-5-10 19:01 编辑


f"values({','.join(map(repr, counter))})"   是 f-string 的字符串格式化方式,

把 ','.join(map(repr, counter)) 的值代入字符串中,

因为直接把 counter 用 ',' 拼接的字符串没有带引号,

所以先用 repr 对 counter 的每个元素处理一遍
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

 楼主| 发表于 2022-5-10 20:40:09 | 显示全部楼层
isdkz 发表于 2022-5-10 18:59
f"values({','.join(map(repr, counter))})"   是 f-string 的字符串格式化方式,

把 ','.join(map( ...

#看数据库部分
import re
from bs4 import BeautifulSoup
import urllib.request
import sqlite3

url = 'https://movie.douban.com/top250?start='
findlink = re.compile(r'<a href="(.*?)">')#电影链接
findimg = re.compile(r'<img .* src="(.*?)"/>',re.S)#图片链接
findname = re.compile(r'span class="title">(.*?)</span>')#电影名
findpeople = re.compile(r'<span>(\d*)人评价</span>')#评价人数
findpoint = re.compile(r'<span class="rating_num" property="v:average">(.*)</span>')#评分
findother = re.compile(r'<p class="">(.*?)</p>',re.S) #获取导演等信息
findothers = re.compile(r'<span class="inq">(.*?)</span>') #获取其他信息
def main():
    #解析网页源码
    datas = Gteurl(url)
    #保存数据
    #Savedata(datas)
    #save_txt(datas)
    save_sql(datas)#这里
def save_sql(datas):#看这里
    connect = sqlite3.connect("movie250.db")
    cur = connect.cursor()
    sql = '''
        create table if not exists 电影排行榜
         (电影中文名 varchar(10) primary key,
         电影外国名 varchar(10),
         电影链接 varchar(100),
         图片链接 varchar(100),
         评价人数 int,
         评分 int,
         导演等信息 varchar(100),
         其他信息 varchar(100)
        );
        '''
    cur.execute(sql)
    for each in datas:

        sql = ("insert into 电影排行榜('电影中文名','电影外国名','电影链接','图片链接','评价人数','评分','导演等信息','其他信息')"
               f"values({','.join(map(repr,each))})")#f"values({','.join(iter(each))})"map不是返回一个迭代器对象吗,each里面的元素已经是字符串了,为什么用iter会出错?
        cur.execute(sql)
        connect.commit()
    cur.close()
    connect.close()
def Gteurl(url):
    datas = []
    for i in range(0,10):
        html = url + str(i*25)
        response = askURL(html)
        bs = BeautifulSoup(response,'html.parser')
        for item in bs.find_all('div',class_ = 'item'):
            data = []
            item = str(item)
            #1
            name = re.findall(findname, item)
            if len(name) == 2:
                cname = name[0]
                data.append(cname)
                oname = name[1].replace("\xa0/\xa0"," ")
                data.append(oname)
            else:
                data.append(name[0])
                data.append(' ')


            #2
            link = re.findall(findlink,item)[0]
            data.append(link)
            #7
            Img = re.findall(findimg,item)[0]
            Img = re.sub(r'width="100','',Img)
            Img = re.sub(r'"', '', Img)

            data.append(Img)
            #3
            nums = re.findall(findpeople,item)[0]
            data.append(nums)
            #6
            point = re.findall(findpoint,item)[0]

            data.append(point)
            #4
            other = re.findall(findother,item)[0]
            new_other = re.sub('<br/>(\s+)?',' ',other)
            new_other = re.sub("\n",'',new_other)
            new_other = re.sub("\xa0", ' ', new_other)


            data.append(new_other)
            #5
            others = re.findall(findothers,item)
            if len(others) !=0:
                data.append(others[0])
            else:
                data.append(' ')
            print(data)
            


    return datas


def askURL(url): #封装数据,得到网页源码
    head = {
        'User-Agent': 'Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/100.0.4896.75 Safari/537.36 Edg/100.0.1185.39'
    }
    req =urllib.request.Request(url = url,headers=head,)#封装的信息,构建请求对象
    response = urllib.request.urlopen(req)#发出请求
    return response
if __name__ == '__main__':
    main()
    print('爬取完毕!')
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2022-5-10 21:04:27 | 显示全部楼层
本帖最后由 isdkz 于 2022-5-10 21:10 编辑
Tihool 发表于 2022-5-10 20:40
#看数据库部分
import re
from bs4 import BeautifulSoup


sql语句中字符串没有引号就会出错呀,

我用 map 的本意不是得到一个迭代器,

直接 join 一个列表都可以的,你用 iter 就多起一举了,

我用 map 是为了给列表的每个元素加上引号

>>> a = ['test0', 'test1', 'test2', 'test3']
>>> a
['test0', 'test1', 'test2', 'test3']
>>> print(','.join(a))
test0,test1,test2,test3                 # 没有引号
>>> b = list(map(repr, a))
>>> b
["'test0'", "'test1'", "'test2'", "'test3'"]
>>> print(','.join(b))
'test0','test1','test2','test3'                 # 有引号
>>>

想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

 楼主| 发表于 2022-5-10 21:23:21 | 显示全部楼层
isdkz 发表于 2022-5-10 21:04
sql语句中字符串没有引号就会出错呀,

我用 map 的本意不是得到一个迭代器,

明白了。谢谢
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

 楼主| 发表于 2022-5-10 21:27:33 | 显示全部楼层
isdkz 发表于 2022-5-10 21:04
sql语句中字符串没有引号就会出错呀,

我用 map 的本意不是得到一个迭代器,

我以为你是把列表每一个元素处理完之后返回一个可迭代对象
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

小黑屋|手机版|Archiver|鱼C工作室 ( 粤ICP备18085999号-1 | 粤公网安备 44051102000585号)

GMT+8, 2024-11-18 10:49

Powered by Discuz! X3.4

© 2001-2023 Discuz! Team.

快速回复 返回顶部 返回列表