Deprecated: imwpcache\f884414bce24ee67f\f73723ec7b1919fa5::__construct(): Implicitly marking parameter $YECBGYFECGEAFWHA as nullable is deprecated, the explicit nullable type must be used instead in /www/wwwroot/www.chuangxiangniao.com/wp-content/plugins/imwpcache-dist/build/f884414bce24ee67ff73723ec7b1919fa5.php on line 2

Deprecated: imwpcache\f884414bce24ee67f\f73723ec7b1919fa5::__construct(): Implicitly marking parameter $BBWFDDBHHYHDXXAB as nullable is deprecated, the explicit nullable type must be used instead in /www/wwwroot/www.chuangxiangniao.com/wp-content/plugins/imwpcache-dist/build/f884414bce24ee67ff73723ec7b1919fa5.php on line 2
Python怎么爬取京东商品信息评论存并进MySQL_创想鸟

Python怎么爬取京东商品信息评论存并进MySQL

构建mysql数据表

问题:使用sql alchemy时,非主键不能设置为自增长,但是我想让这个非主键仅仅是为了作为索引,autoincrement=true无效,该怎么实现让它自增长呢?

from sqlalchemy import String,Integer,Text,Columnfrom sqlalchemy import create_enginefrom sqlalchemy.orm import sessionmakerfrom sqlalchemy.orm import scoped_sessionfrom sqlalchemy.ext.declarative import declarative_base engine=create_engine(    "mysql+pymysql://root:root@127.0.0.1:3306/jdcrawl?charset=utf8",    pool_size=200,    max_overflow=300,    echo=False) BASE=declarative_base() # 实例化 class Goods(BASE):    __tablename__='goods'    id=Column(Integer(),primary_key=True,autoincrement=True)    sku_id = Column(String(200), primary_key=True, autoincrement=False)    name=Column(String(200))    price=Column(String(200))    comments_num=Column(Integer)    shop=Column(String(200))    link=Column(String(200)) class Comments(BASE):    __tablename__='comments'    id=Column(Integer(),primary_key=True,autoincrement=True,nullable=False)    sku_id=Column(String(200),primary_key=True,autoincrement=False)    comments=Column(Text()) BASE.metadata.create_all(engine)Session=sessionmaker(engine)sess_db=scoped_session(Session)

第一版:

问题:爬取几页评论后就会爬取到空白页,添加refer后依旧如此

尝试解决方法:将获取评论地方的线程池改为单线程,并每获取一页评论增加延时1s

# 不能爬太快!!!不然获取不到评论 from bs4 import BeautifulSoupimport requestsfrom urllib import parseimport csv,json,reimport threadpoolimport timefrom jd_mysqldb import Goods,Comments,sess_db headers={    'user-agent': 'Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/86.0.4240.198 Safari/537.36',    'Cookie': '__jdv=76161171|baidu|-|organic|%25E4%25BA%25AC%25E4%25B8%259C|1613711947911; __jdu=16137119479101182770449; areaId=7; ipLoc-djd=7-458-466-0; PCSYCityID=CN_410000_0_0; shshshfpa=07383463-032f-3f99-9d40-639cb57c6e28-1613711950; shshshfpb=u8S9UvxK66gfIbM1mUNrIOg%3D%3D; user-key=153f6b4d-0704-4e56-82b6-8646f3f0dad4; cn=0; shshshfp=9a88944b34cb0ff3631a0a95907b75eb; __jdc=122270672; 3AB9D23F7A4B3C9B=SEELVNXBPU7OAA3UX5JTKR5LQADM5YFJRKY23Z6HDBU4OT2NWYGX525CKFFVHTRDJ7Q5DJRMRZQIQJOW5GVBY43XVI; jwotest_product=99; __jda=122270672.16137119479101182770449.1613711948.1613738165.1613748918.4; JSESSIONID=C06EC8D2E9384D2628AE22B1A6F9F8FC.s1; shshshsID=ab2ca3143928b1b01f6c5b71a15fcebe_5_1613750374847; __jdb=122270672.5.16137119479101182770449|4.1613748918',    'Referer': 'https://www.jd.com/'} num=0   # 商品数量comments_num=0   # 评论数量 # 获取商品信息和SkuIddef getIndex(url):    session=requests.Session()    session.headers=headers    global num    res=session.get(url,headers=headers)    print(res.status_code)    res.encoding=res.apparent_encoding    soup=BeautifulSoup(res.text,'lxml')    items=soup.select('li.gl-item')    for item in items[:3]:  # 爬取3个商品测试        title=item.select_one('.p-name a em').text.strip().replace(' ','')        price=item.select_one('.p-price strong').text.strip().replace('¥','')        try:            shop=item.select_one('.p-shopnum a').text.strip()   # 获取书籍时查找店铺的方法        except:            shop=item.select_one('.p-shop a').text.strip()  #   获取其他商品时查找店铺的方法        link=parse.urljoin('https://',item.select_one('.p-img a').get('href'))        SkuId=re.search('d+',link).group()        comments_num=getCommentsNum(SkuId,session)        print(SkuId,title, price, shop, link, comments_num)        print("开始存入数据库...")        try:            IntoGoods(SkuId,title, price, shop, link, comments_num)        except Exception as e:            print(e)            sess_db.rollback()        num += 1        print("正在获取评论...")        # 获取评论总页数        url1 = f'https://club.jd.com/comment/productPageComments.action?productId={SkuId}&score=0&sortType=5&page=0&pageSize=10'        headers['Referer'] = f'https://item.jd.com/{SkuId}.html'        headers['Connection']='keep-alive'        res2 = session.get(url1,headers=headers)        res2.encoding = res2.apparent_encoding        json_data = json.loads(res2.text)        max_page = json_data['maxPage']  # 经测试最多可获取100页评论,每页10条        args = []        for i in range(0, max_page):            # 使用此链接获取评论得到的为json格式            url2 = f'https://club.jd.com/comment/productPageComments.action?productId={SkuId}&score=0&sortType=5&page={i}&pageSize=10'            # 使用此链接获取评论得到的非json格式,需要提取            # url2_2=f'https://club.jd.com/comment/productPageComments.action?callback=jQuery9287224&productId={SkuId}&score=0&sortType=5&page={i}&pageSize=10'            args.append(([session,SkuId,url2], None))        pool2 = threadpool.ThreadPool(2)   # 2个线程        reque2 = threadpool.makeRequests(getComments,args)  # 创建任务        for r in reque2:            pool2.putRequest(r) # 提交任务到线程池        pool2.wait() # 获取评论总数量def getCommentsNum(SkuId,sess):    headers['Referer']=f'https://item.jd.com/{SkuId}.html'    url=f'https://club.jd.com/comment/productCommentSummaries.action?referenceIds={SkuId}'    res=sess.get(url,headers=headers)    try:        res.encoding=res.apparent_encoding        json_data=json.loads(res.text)  # json格式转为字典        num=json_data['CommentsCount'][0]['CommentCount']        return num    except:        return 'Error' # 获取评论def getComments(sess,SkuId,url2):    global comments_num    print(url2)    headers['Referer'] = f'https://item.jd.com/{SkuId}.html'    res2 = sess.get(url2,headers=headers)    res2.encoding='gbk'    json_data=res2.text    '''    # 如果用url2_2需要进行如下操作提取json    start = res2.text.find('jQuery9287224(') + len('jQuery9287224(')    end = res2.text.find(');')    json_data=res2.text[start:end]    '''    dict_data = json.loads(json_data)    try:        comments=dict_data['comments']        for item in comments:            comment=item['content'].replace('n','')            # print(comment)            comments_num+=1            try:                IntoComments(SkuId,comment)            except Exception as e:                print(e)                sess_db.rollback()    except:        pass # 商品信息入库def IntoGoods(SkuId,title, price, shop, link, comments_num):    goods_data=Goods(        sku_id=SkuId,        name=title,        price=price,        comments_num=comments_num,        shop=shop,        link=link    )    sess_db.add(goods_data)    sess_db.commit() # 评论入库def IntoComments(SkuId,comment):    comments_data=Comments(        sku_id=SkuId,        comments=comment    )    sess_db.add(comments_data)    sess_db.commit() if __name__ == '__main__':    start_time=time.time()    urls=[]    KEYWORD=parse.quote(input("请输入要查询的关键词:"))    for i in range(1,2):    # 爬取一页进行测试        url=f'https://search.jd.com/Search?keyword={KEYWORD}&wq={KEYWORD}&page={i}'        urls.append(([url,],None))  # threadpool要求必须这样写    pool=threadpool.ThreadPool(2)  # 2个线程的线程池    reque=threadpool.makeRequests(getIndex,urls)    # 创建任务    for r in reque:        pool.putRequest(r)  # 向线程池提交任务    pool.wait() # 等待所有任务执行完毕    print("共获取{}件商品,获得{}条评论,耗时{}".format(num,comments_num,time.time()-start_time))

第二版 :

经测试,的确不会出现空白页的情况

进一步优化:同时获取2个以上商品的评论

京点点 京点点

京东AIGC内容生成平台

京点点 26 查看详情 京点点

立即学习“Python免费学习笔记(深入)”;

# 不能爬太快!!!不然获取不到评论from bs4 import BeautifulSoupimport requestsfrom urllib import parseimport csv,json,reimport threadpoolimport timefrom jd_mysqldb import Goods,Comments,sess_db headers={    'user-agent': 'Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/86.0.4240.198 Safari/537.36',    'Cookie': '__jdv=76161171|baidu|-|organic|%25E4%25BA%25AC%25E4%25B8%259C|1613711947911; __jdu=16137119479101182770449; areaId=7; ipLoc-djd=7-458-466-0; PCSYCityID=CN_410000_0_0; shshshfpa=07383463-032f-3f99-9d40-639cb57c6e28-1613711950; shshshfpb=u8S9UvxK66gfIbM1mUNrIOg%3D%3D; user-key=153f6b4d-0704-4e56-82b6-8646f3f0dad4; cn=0; shshshfp=9a88944b34cb0ff3631a0a95907b75eb; __jdc=122270672; 3AB9D23F7A4B3C9B=SEELVNXBPU7OAA3UX5JTKR5LQADM5YFJRKY23Z6HDBU4OT2NWYGX525CKFFVHTRDJ7Q5DJRMRZQIQJOW5GVBY43XVI; jwotest_product=99; __jda=122270672.16137119479101182770449.1613711948.1613738165.1613748918.4; JSESSIONID=C06EC8D2E9384D2628AE22B1A6F9F8FC.s1; shshshsID=ab2ca3143928b1b01f6c5b71a15fcebe_5_1613750374847; __jdb=122270672.5.16137119479101182770449|4.1613748918',    'Referer': 'https://www.jd.com/'} num=0   # 商品数量comments_num=0   # 评论数量 # 获取商品信息和SkuIddef getIndex(url):    session=requests.Session()    session.headers=headers    global num    res=session.get(url,headers=headers)    print(res.status_code)    res.encoding=res.apparent_encoding    soup=BeautifulSoup(res.text,'lxml')    items=soup.select('li.gl-item')    for item in items[:2]:  # 爬取2个商品测试        title=item.select_one('.p-name a em').text.strip().replace(' ','')        price=item.select_one('.p-price strong').text.strip().replace('¥','')        try:            shop=item.select_one('.p-shopnum a').text.strip()   # 获取书籍时查找店铺的方法        except:            shop=item.select_one('.p-shop a').text.strip()  #   获取其他商品时查找店铺的方法        link=parse.urljoin('https://',item.select_one('.p-img a').get('href'))        SkuId=re.search('d+',link).group()        headers['Referer'] = f'https://item.jd.com/{SkuId}.html'        headers['Connection'] = 'keep-alive'        comments_num=getCommentsNum(SkuId,session)        print(SkuId,title, price, shop, link, comments_num)        print("开始将商品存入数据库...")        try:            IntoGoods(SkuId,title, price, shop, link, comments_num)        except Exception as e:            print(e)            sess_db.rollback()        num += 1        print("正在获取评论...")        # 获取评论总页数        url1 = f'https://club.jd.com/comment/productPageComments.action?productId={SkuId}&score=0&sortType=5&page=0&pageSize=10'        res2 = session.get(url1,headers=headers)        res2.encoding = res2.apparent_encoding        json_data = json.loads(res2.text)        max_page = json_data['maxPage']  # 经测试最多可获取100页评论,每页10条        print("{}评论共{}页".format(SkuId,max_page))        if max_page==0:            IntoComments(SkuId,'0')        else:            for i in range(0, max_page):                # 使用此链接获取评论得到的为json格式                url2 = f'https://club.jd.com/comment/productPageComments.action?productId={SkuId}&score=0&sortType=5&page={i}&pageSize=10'                # 使用此链接获取评论得到的非json格式,需要提取                # url2_2=f'https://club.jd.com/comment/productPageComments.action?callback=jQuery9287224&productId={SkuId}&score=0&sortType=5&page={i}&pageSize=10'                print("开始获取第{}页评论:{}".format(i+1,url2) )                getComments(session,SkuId,url2)                time.sleep(1) # 获取评论总数量def getCommentsNum(SkuId,sess):    url=f'https://club.jd.com/comment/productCommentSummaries.action?referenceIds={SkuId}'    res=sess.get(url)    try:        res.encoding=res.apparent_encoding        json_data=json.loads(res.text)  # json格式转为字典        num=json_data['CommentsCount'][0]['CommentCount']        return num    except:        return 'Error' # 获取评论def getComments(sess,SkuId,url2):    global comments_num    res2 = sess.get(url2)    res2.encoding=res2.apparent_encoding    json_data=res2.text    '''    # 如果用url2_2需要进行如下操作提取json    start = res2.text.find('jQuery9287224(') + len('jQuery9287224(')    end = res2.text.find(');')    json_data=res2.text[start:end]    '''    dict_data = json.loads(json_data)    comments=dict_data['comments']    for item in comments:        comment=item['content'].replace('n','')        # print(comment)        comments_num+=1        try:            IntoComments(SkuId,comment)        except Exception as e:            print(e)            sess_db.rollback() # 商品信息入库def IntoGoods(SkuId,title, price, shop, link, comments_num):    goods_data=Goods(        sku_id=SkuId,        name=title,        price=price,        comments_num=comments_num,        shop=shop,        link=link    )    sess_db.add(goods_data)    sess_db.commit() # 评论入库def IntoComments(SkuId,comment):    comments_data=Comments(        sku_id=SkuId,        comments=comment    )    sess_db.add(comments_data)    sess_db.commit() if __name__ == '__main__':    start_time=time.time()    urls=[]    KEYWORD=parse.quote(input("请输入要查询的关键词:"))    for i in range(1,2):    # 爬取一页进行测试        url=f'https://search.jd.com/Search?keyword={KEYWORD}&wq={KEYWORD}&page={i}'        urls.append(([url,],None))  # threadpool要求必须这样写    pool=threadpool.ThreadPool(2)  # 2个线程的线程池    reque=threadpool.makeRequests(getIndex,urls)    # 创建任务    for r in reque:        pool.putRequest(r)  # 向线程池提交任务    pool.wait() # 等待所有任务执行完毕    print("共获取{}件商品,获得{}条评论,耗时{}".format(num,comments_num,time.time()-start_time))

第三版:

 。。。。不行,又出现空白页了

# 不能爬太快!!!不然获取不到评论from bs4 import BeautifulSoupimport requestsfrom urllib import parseimport csv,json,reimport threadpoolimport timefrom jd_mysqldb import Goods,Comments,sess_db headers={    'user-agent': 'Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/86.0.4240.198 Safari/537.36',    'Cookie': '__jdv=76161171|baidu|-|organic|%25E4%25BA%25AC%25E4%25B8%259C|1613711947911; __jdu=16137119479101182770449; areaId=7; ipLoc-djd=7-458-466-0; PCSYCityID=CN_410000_0_0; shshshfpa=07383463-032f-3f99-9d40-639cb57c6e28-1613711950; shshshfpb=u8S9UvxK66gfIbM1mUNrIOg%3D%3D; user-key=153f6b4d-0704-4e56-82b6-8646f3f0dad4; cn=0; shshshfp=9a88944b34cb0ff3631a0a95907b75eb; __jdc=122270672; 3AB9D23F7A4B3C9B=SEELVNXBPU7OAA3UX5JTKR5LQADM5YFJRKY23Z6HDBU4OT2NWYGX525CKFFVHTRDJ7Q5DJRMRZQIQJOW5GVBY43XVI; jwotest_product=99; __jda=122270672.16137119479101182770449.1613711948.1613738165.1613748918.4; JSESSIONID=C06EC8D2E9384D2628AE22B1A6F9F8FC.s1; shshshsID=ab2ca3143928b1b01f6c5b71a15fcebe_5_1613750374847; __jdb=122270672.5.16137119479101182770449|4.1613748918',    'Referer': 'https://www.jd.com/'} num=0   # 商品数量comments_num=0   # 评论数量 # 获取商品信息和SkuIddef getIndex(url):    global num    skuids=[]    session=requests.Session()    session.headers=headers    res=session.get(url,headers=headers)    print(res.status_code)    res.encoding=res.apparent_encoding    soup=BeautifulSoup(res.text,'lxml')    items=soup.select('li.gl-item')    for item in items[:3]:  # 爬取3个商品测试        title=item.select_one('.p-name a em').text.strip().replace(' ','')        price=item.select_one('.p-price strong').text.strip().replace('¥','')        try:            shop=item.select_one('.p-shopnum a').text.strip()   # 获取书籍时查找店铺的方法        except:            shop=item.select_one('.p-shop a').text.strip()  #   获取其他商品时查找店铺的方法        link=parse.urljoin('https://',item.select_one('.p-img a').get('href'))        SkuId=re.search('d+',link).group()        skuids.append(([SkuId,session],None))        headers['Referer'] = f'https://item.jd.com/{SkuId}.html'        headers['Connection'] = 'keep-alive'        comments_num=getCommentsNum(SkuId,session)  # 评论数量        print(SkuId,title, price, shop, link, comments_num)        print("开始将商品存入数据库...")        try:            IntoGoods(SkuId,title, price, shop, link, comments_num)        except Exception as e:            print(e)            sess_db.rollback()        num += 1    print("开始获取评论并存入数据库...")    pool2=threadpool.ThreadPool(3)   # 可同时获取3个商品的评论    task=threadpool.makeRequests(getComments,skuids)    for r in task:        pool2.putRequest(r)    pool2.wait() # 获取评论def getComments(SkuId,sess):    # 获取评论总页数    url1 = f'https://club.jd.com/comment/productPageComments.action?productId={SkuId}&score=0&sortType=5&page=0&pageSize=10'    res2 = sess.get(url1, headers=headers)    res2.encoding = res2.apparent_encoding    json_data = json.loads(res2.text)    max_page = json_data['maxPage']  # 经测试最多可获取100页评论,每页10条    print("{}评论共{}页".format(SkuId, max_page))    if max_page == 0:        IntoComments(SkuId, '0')    else:        for i in range(0, max_page):            # 使用此链接获取评论得到的为json格式            url2 = f'https://club.jd.com/comment/productPageComments.action?productId={SkuId}&score=0&sortType=5&page={i}&pageSize=10'            # 使用此链接获取评论得到的非json格式,需要提取            # url2_2=f'https://club.jd.com/comment/productPageComments.action?callback=jQuery9287224&productId={SkuId}&score=0&sortType=5&page={i}&pageSize=10'            print("开始获取第{}页评论:{}".format(i + 1, url2))            getComments_one(sess, SkuId, url2)            time.sleep(1) # 获取评论总数量def getCommentsNum(SkuId,sess):    url=f'https://club.jd.com/comment/productCommentSummaries.action?referenceIds={SkuId}'    res=sess.get(url)    try:        res.encoding=res.apparent_encoding        json_data=json.loads(res.text)  # json格式转为字典        num=json_data['CommentsCount'][0]['CommentCount']        return num    except:        return 'Error' # 获取单个评论def getComments_one(sess,SkuId,url2):    global comments_num    res2 = sess.get(url2)    res2.encoding=res2.apparent_encoding    json_data=res2.text    '''    # 如果用url2_2需要进行如下操作提取json    start = res2.text.find('jQuery9287224(') + len('jQuery9287224(')    end = res2.text.find(');')    json_data=res2.text[start:end]    '''    dict_data = json.loads(json_data)    comments=dict_data['comments']    for item in comments:        comment=item['content'].replace('n','')        # print(comment)        comments_num+=1        try:            IntoComments(SkuId,comment)        except Exception as e:            print(e)            print("rollback!")            sess_db.rollback() # 商品信息入库def IntoGoods(SkuId,title, price, shop, link, comments_num):    goods_data=Goods(        sku_id=SkuId,        name=title,        price=price,        comments_num=comments_num,        shop=shop,        link=link    )    sess_db.add(goods_data)    sess_db.commit() # 评论入库def IntoComments(SkuId,comment):    comments_data=Comments(        sku_id=SkuId,        comments=comment    )    sess_db.add(comments_data)    sess_db.commit() if __name__ == '__main__':    start_time=time.time()    urls=[]    KEYWORD=parse.quote(input("请输入要查询的关键词:"))    for i in range(1,2):    # 爬取一页进行测试        url=f'https://search.jd.com/Search?keyword={KEYWORD}&wq={KEYWORD}&page={i}'        urls.append(([url,],None))  # threadpool要求必须这样写    pool=threadpool.ThreadPool(2)  # 2个线程的线程池    reque=threadpool.makeRequests(getIndex,urls)    # 创建任务    for r in reque:        pool.putRequest(r)  # 向线程池提交任务    pool.wait() # 等待所有任务执行完毕    print("共获取{}件商品,获得{}条评论,耗时{}".format(num,comments_num,time.time()-start_time))

以上就是Python怎么爬取京东商品信息评论存并进MySQL的详细内容,更多请关注创想鸟其它相关文章!

版权声明:本文内容由互联网用户自发贡献,该文观点仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。
如发现本站有涉嫌抄袭侵权/违法违规的内容, 请发送邮件至 chuangxiangniao@163.com 举报,一经查实,本站将立刻删除。
发布者:程序猿,转转请注明出处:https://www.chuangxiangniao.com/p/271939.html

(0)
打赏 微信扫一扫 微信扫一扫 支付宝扫一扫 支付宝扫一扫
如何解决下拉选择框的用户体验问题?使用Composer安装harvesthq/chosen可以提升你的网页交互
上一篇 2025年11月4日 12:47:15
红果漫剧怎么查看我的粉丝_红果漫剧粉丝列表查看方法
下一篇 2025年11月4日 12:47:24

相关推荐

  • 学好mysql数据库能找到什么工作

    学好mysql数据库能找到什么工作学好mysql数据库能找到什么工作学好mysql数据库能找到什么工作学好mysql数据库能找到什么工作

    掌握 MySQL 数据库可为求职者带来众多工作机会,包括数据库管理员、数据库开发人员、数据分析师、数据科学家、商业智能分析师、软件工程师、Web 开发人员、测试工程师和数据挖掘工程师。 学好 MySQL 数据库能找到哪些工作? 精通 MySQL 数据库可为求职者创造众多职业机会,包括: 数据库管理员…

    2026年9月24日 用户投稿
    200
  • DeepSeek能不能帮我写代码 简单编程任务如何交给DeepSeek完成

    DeepSeek能不能帮我写代码 简单编程任务如何交给DeepSeek完成DeepSeek能不能帮我写代码 简单编程任务如何交给DeepSeek完成DeepSeek能不能帮我写代码 简单编程任务如何交给DeepSeek完成DeepSeek能不能帮我写代码 简单编程任务如何交给DeepSeek完成

    很多用户好奇,像DeepSeek这样的AI模型能否帮助完成编程任务,特别是那些相对简单的编程需求。答案是肯定的。DeepSeek具备理解自然语言描述并尝试生成相应代码的能力,这使得它成为完成一些简单编程任务的有力工具。 ☞☞☞AI 智能聊天, 问答助手, AI 智能搜索, 免费无限量使用 DeepS…

    2026年9月24日 用户投稿
    100
  • mysql的全文检索是什么

    mysql的全文检索是什么mysql的全文检索是什么mysql的全文检索是什么mysql的全文检索是什么

    摘要:MySQL 全文检索是一种在文本中搜索单词或短语的技术。其工作原理是:将文本拆分为标记并存储在全文索引中。匹配文本列中标记的搜索词或短语。提供快速搜索、相关性排序、模糊搜索和部分匹配功能。 MySQL 全文检索 全文检索是一种用于在文本内容中搜索单词或短语的技术。MySQL 中的全文检索功能允…

    2026年9月24日 用户投稿
    100
  • mysql中rand的用法 mysql随机函数使用教程

    mysql 的 rand() 函数返回 0 到 1 之间的随机浮点数,用于随机选择和排序数据。1)随机排序:select from your_table order by rand()。2)随机抽取记录:select from your_table order by rand() limit 10。…

    2026年9月24日
    200
  • VSCode如何实现代码热重载 VSCode实时预览开发的高效配置方案

    使用live server扩展实现静态文件的实时预览,保存后浏览器自动刷新;2. 利用现代前端框架(如react、vue)内置的开发服务器(如vite、webpack dev server)实现hmr热模块替换,修改代码后仅更新变动模块而不刷新页面;3. 结合browsersync等工具实现多设备同…

    2026年9月24日
    000
  • mysql临时表如何使用_PHP中操作mysql临时表的具体步骤

    MySQL临时表仅在当前会话可见,连接关闭后自动删除,适合中间数据处理。使用PHP操作时,先通过mysqli或PDO建立数据库连接,再执行CREATE TEMPORARY TABLE语句创建临时表,随后可像普通表一样进行INSERT、SELECT及JOIN等操作。临时表可与永久表同名且优先被使用,支…

    2026年9月24日
    000
  • mysql中*是什么意思 mysql星号通配符解析

    在 mysql 中,星号()最常用于 select 语句中代表所有列,但应谨慎使用。1)它方便查看所有数据,但可能返回不必要的数据,影响性能。2)使用可能降低代码可维护性,建议明确列出所需列。3)在like操作符中,不是通配符,需用regexp。4)在视图中使用可能导致定义失效。5)可结合limit…

    2026年9月24日
    000
  • APM开发阅读

    APM开发阅读APM开发阅读APM开发阅读APM开发阅读

    我阅读apm的源码有两个主要目的:一是学习,了解飞控系统和大型项目的组织结构;二是为了移植的需要,满足项目需求。近年来,少儿编程市场非常火热,许多厂商推出了相关的产品,但这些产品大多使用空心杯电机,导致动力不足,且扩展性有限。许多任务需要io或图像识别的支持。 因此,我在考虑使用APM裁剪版的飞控系…

    2026年9月24日 用户投稿
    1600
  • MySQL中SQL注入防范 SQL注入攻击的预防与应对措施

    sql注入的防范核心在于参数化查询。具体措施包括:1.始终使用参数化查询,将用户输入视为数据而非可执行代码;2.对输入进行过滤与校验,如验证格式、转义特殊字符;3.遵循最小权限原则,限制数据库账号权限;4.控制错误信息输出,避免暴露敏感细节;5.定期更新框架与插件,及时修补漏洞。这些方法结合使用能有…

    2026年9月24日
    000
  • 如何在mysql中升级高可用集群

    先确认版本兼容性、应用依赖及备份完整性,再按架构选择升级路径。对Group Replication或InnoDB Cluster采用滚动升级,先升从节点最后升主节点;MHA/Orchestrator架构先升备库再切换主库;PXC需停集群全量升级。替换二进制后启动实例并运行mysql_upgrade,…

    2026年9月24日
    000
  • VSCode的扩展设置是全局的还是局部的?

    VSCode扩展设置默认全局生效,存储于用户配置文件中,但部分扩展如ESLint、Prettier和Python支持项目级局部配置,通过在项目根目录的.vscode/settings.json文件中定义,可覆盖全局设置;在设置界面中,齿轮图标表示可被工作区覆盖,锁图标表示仅限全局修改,用户可根据需求…

    2026年9月24日
    200
  • MySQL怎样处理SQL注入风险 参数化查询与特殊字符过滤方案

    MySQL怎样处理SQL注入风险 参数化查询与特殊字符过滤方案MySQL怎样处理SQL注入风险 参数化查询与特殊字符过滤方案MySQL怎样处理SQL注入风险 参数化查询与特殊字符过滤方案MySQL怎样处理SQL注入风险 参数化查询与特殊字符过滤方案

    参数化查询和特殊字符过滤是防止sql注入的有效方法。1. 参数化查询通过预处理语句将sql结构与数据分离,用户输入被视为参数,不会被解释为sql命令;2. 特殊字符过滤通过转义或拒绝单引号、双引号等危险字符来阻止攻击;3. 定期审查mysql安全配置,包括更新版本、限制权限、启用日志、使用防火墙和扫…

    2026年9月24日 用户投稿
    000
  • Python创建模块并调用函数

    在PyCharm中创建新项目后,于项目根目录下新建一个名为 jisuanqi.py 的Python脚本文件。 在该文件中定义一个函数 ys,该函数包含三个形参:a、b 和 c。其中,a 与 b 为参与数学运算的操作数,c 用于指定运算类型——当值为0时执行加法,1时为减法,2时为乘法,3时则进行除法…

    2026年9月24日
    000
  • 减少PHP与MySQL数据库通信的延迟

    减少php与mysql数据库通信的延迟可以通过以下策略:1. 优化数据库查询,使用索引提升查询速度;2. 减少数据库连接次数,使用连接池管理连接;3. 查询优化,使用explain分析查询计划;4. 使用缓存,如redis,减少数据库查询次数。这些方法能显著提升应用性能,但需权衡利弊,确保系统稳定性…

    2026年9月24日
    000
  • 解决MySQL事件event定义中文乱码的方法

    mysql的event事件处理中文乱码问题主要由字符集设置不当引起,解决方法包括以下步骤:1. 统一数据库、表和字段的字符集为utf8mb4,创建或修改时显式指定字符集;2. 设置连接层字符集,在连接后执行set names ‘utf8mb4’或在程序连接参数中指定chars…

    2026年9月24日
    300
  • VSCode如何优化多语言混编 VSCode复合工程项目的管理技巧

    #%#$#%@%@%$#%$#%#%#$%@_e2fc++805085e25c9761616c00e065bfe8处理多语言混编和复杂项目的核心策略是使用多根工作区(multi-root workspace),通过创建.code-workspace文件将不同语言或模块的目录统一管理,实现跨项目文件浏…

    2026年9月24日
    000
  • Java中接口常量和类常量的使用区别

    接口常量默认public static final,用于行为契约但易导致职责模糊;类常量可用不同访问修饰符,更适合封装和维护。现代Java推荐使用专用常量类、枚举、私有静态常量或配置文件管理常量,以提升代码清晰度与可维护性。 Java中接口常量和类常量,核心区别在于它们的定义位置和隐式属性。接口常量…

    2026年9月24日
    000
  • mysql中in的用法详解 mysql in查询全面解析

    in操作符在mysql中用于检查值是否在指定列表内。1) 基本用法:select from users where name in (‘john’, ‘jane’, ‘jack’)。2) 子查询用法:select from or…

    2026年9月24日
    000
  • PHP 中如何将 JSON 数组值声明为变量

    本文介绍了如何在 PHP 中从数据库获取数据并将其编码为 JSON 格式,然后通过 AJAX 请求传递到另一个页面。重点讲解了如何在接收页面解析 JSON 数据,并将 JSON 数组中的特定值提取并赋值给变量,以便在后续的 PHP 函数中使用。 从数据库获取数据并编码为 JSON 首先,我们需要从数…

    2026年9月24日
    000
  • VSCode如何通过Dev Containers开发 VSCode开发容器环境的搭建与使用

    vscode通过dev containers提供容器化开发环境,解决了“在我的机器上能运行”的问题。1. 安装docker并配置vscode访问;2. 安装remote – containers扩展;3. 创建.devcontainer文件夹和devcontainer.json文件;4.…

    2026年9月24日
    100

发表回复

登录后才能评论
关注微信