使用sqlalchemy建表并从txt文件读取入库

使用sqlalchemy建表

首先数据库要存在,我使用的是mysql数据库。

from sqlalchemy import Column, String, create_engine, Integer
from sqlalchemy.orm import sessionmaker, scoped_session
from sqlalchemy.ext.declarative import declarative_base


# 初始化数据库连接,?charset=utf8处理编码问题
connection_url = "mysql+pymysql://root:123456@127.0.0.1:3306/test1?charset=utf8"
engine = create_engine(connection_url, echo=True, pool_recycle=7200,
                       pool_timeout=3600, )  # echo,控制台是否打印日志信息

# 创建对象的基类
Base = declarative_base()
# 创建DBSession类型:
DBSession = sessionmaker(bind=engine)
# session = DBSession()
session = scoped_session(DBSession) # 线程安全

# 创建表
class zz_info(Base):
    # 定义表名
    __tablename__ = 'zz_info'

    # 表结构
    id = Column(Integer, primary_key=True, autoincrement=True)
    网站首页地址 = Column(String(255),unique=True)
    网站名称 = Column(String(50))
    主办单位名称 = Column(String(100))
    域名ip = Column(String(60))
    IP的物理位置 = Column(String(300))
    处理状态 = Column(Integer,default=0)
    # 设置编码问题
    __table_args__ = {

        'mysql_charset': 'utf8'
    }

Base.metadata.create_all(engine)  # 创建表结构

if __name__ == '__main__':
    pass

从txt读取数据并入库

txt文件为每行一个的站点地址。

在这里插入图片描述
代码中含有注释说明,直接看代码吧

from sqlalchemy import text
from .model.create_tb import session,zz_info
from loguru import logger


class add_to_table(object):

    def __init__(self, session):
        self.session = session

    def add(self, index):
        # ct = zz_info(网站首页地址=index)
        # self.session.add(ct)

        # 使用sql语句
        item = {
            '网站首页地址': index,
            '处理状态': 0
        }
        # ignore出现错误忽略
        sql = text(
            "insert ignore into zz_info (网站首页地址,处理状态) values"
            " (:网站首页地址,:处理状态);")
        session.execute(sql, item)

if __name__ == '__main__':
    # 创建对象
    add_to_table = add_to_table(session)
    # 这里encoding为txt的编码格式
    with open('domain.txt', 'r', encoding='gbk') as f:
        lines = f.readlines()
        for line in lines:
            # 读取txt文件,换行会读取,数据库显示会和系统读取出来的有出入,使用strip()去除空格
            add_to_table.add(index=line.strip())
        try:
            session.commit()
        except Exception:
            print(Exception)
    logger.debug('站点信息入库完成!')

如果出现中文乱码问题可以看下面这部分

解决mysql数据库中文乱码问题

我使用的mysql,一开始入库中文显示?乱码问题,需要修改mysql的编码格式。在mysql的安装路径下修改配置文件。

win10找到:C:\Program Files\MySQL\MySQL Server 5.5。修改my.ini文件的编码格式。这个默认的编码是在安装mysql的时候设置的。

在这里插入图片描述

修改配置文件保存后需要重启mysql服务,使用命令重启mysql:

关闭 net stop mysql
启动 net start mysql

可以在命令窗口使用命令来查看mysql的默认编码。

show variables like 'char%';

查看mysql的默认编码
设置完成。如果入库信息中文仍乱码,试试下面这个。
cmd窗口设置编码格式:

chcp 65001
展开阅读全文
©️2020 CSDN 皮肤主题: 游动-白 设计师: 上身试试 返回首页
实付0元
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、C币套餐、付费专栏及课程。

余额充值