使用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%';
設置完成。如果入庫信息中文仍亂碼,試試下面這個。
cmd窗口設置編碼格式:
chcp 65001