使用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:[email protected]: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
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章