0
点赞
收藏
分享

微信扫一扫

实现字典查询小工具(Python)

1、创建数据库

首先登陆远程的一个数据库,新建一个测试库,并绑定登陆用户密码

[root@V2 ~]# mysql -uroot -p
Enter password:
Welcome to the MariaDB monitor. Commands end with ; or \g.
Your MariaDB connection id is 123
Server version: 5.5.56-MariaDB MariaDB Server

Copyright (c) 2000, 2017, Oracle, MariaDB Corporation Ab and others.

Type 'help;' or '\h' for help. Type '\c' to clear the current input statement.

MariaDB [(none)]>
MariaDB [(none)]> create database sqlalchemy default character set utf8 collate utf8_general_ci;
Query OK, 1 row affected (0.00 sec) # 创建数据库时需指定字符集

MariaDB [(none)]> grant all privileges on databaseName.* to databaseUser@'%' identified by 'databasePasswd';
Query OK, 0 rows affected (0.00 sec)

MariaDB [(none)]> flush privileges;
Query OK, 0 rows affected (0.00 sec)

MariaDB [(none)]>

这里需要注意的是:

创建数据库的时候一定要指定字符集为utf8(排序规则为utf8_general_ci)

创建数据库的时候一定要指定字符集为utf8(排序规则为utf8_general_ci)

创建数据库的时候一定要指定字符集为utf8(排序规则为utf8_general_ci)

在不指定的情况下生成数据库,创建表的时候默认的会是 CHARSET=latin1,这样将导致插入中文的时候出现乱码或者全是问号,如下所示

实现字典查询小工具(Python)_sqlalchemy

实现字典查询小工具(Python)_创建数据库_02

 - 表情来自网络 -

2、建立表结构

接着我们创建表结构

#!/usr/bin/env python
# -*- coding:utf-8 -*-
# @Time : 2018/5/30 13:46
# @Author : zhouyuyao
# @File : createTable.py
import codecs

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

engine = create_engine('mysql+pymysql://databaseUser:databasePasswd@xxx.xxx.xxx.xxx/databaseName')

metadata = MetaData(engine)

dictionary = Table('dictionary', metadata,
Column('id', Integer, primary_key=True),
Column('key', String(50)),
Column('value', String(50))
)
metadata.create_all(engine)

我们在远程库上可以查看到新建的表及其结构

MariaDB [(none)]> use sqlalchemy;            
Reading table information for completion of table and column names
You can turn off this feature to get a quicker startup with -A

Database changed
MariaDB [sqlalchemy]> show tables;
+----------------------+
| Tables_in_sqlalchemy |
+----------------------+
| dictionary |
+----------------------+
1 row in set (0.00 sec)

MariaDB [sqlalchemy]> show create table dictionary;
+------------+-----------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------+
| Table | Create Table |
+------------+-----------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------+
| dictionary | CREATE TABLE `dictionary` (
`id` int(11) NOT NULL AUTO_INCREMENT,
`key` varchar(50) DEFAULT NULL,
`value` varchar(50) DEFAULT NULL,
PRIMARY KEY (`id`)
) ENGINE=InnoDB DEFAULT CHARSET=utf8 |
+------------+-----------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------+
1 row in set (0.00 sec)

MariaDB [sqlalchemy]>


3、导入数据

接着我们将字典文件里面的数据插入至表中

#!/usr/bin/env python
# -*- coding:utf-8 -*-
# @Time : 2018/5/29 20:48
# @Author : zhouyuyao
# @File : demon1.py
import codecs

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

engine = create_engine('mysql+pymysql://databaseUser:databasePasswd@xxx.xxx.xxx.xxx/databaseName?charset=utf8')

Base = declarative_base()
class Dictionary(Base):
__tablename__ = 'dictionary'
id = Column(Integer, primary_key=True)
key = Column(String(50))
value = Column(String(50))

DBSession = sessionmaker(bind=engine)
session = DBSession()

class HandleData(object):
def __init__(self, dataFile):
self.dataFile = dataFile
def make_data_to_str(self):
with codecs.open(self.dataFile, encoding='utf-8') as file:
for (num, value) in enumerate(file):
line = value.strip().split()
diction =Dictionary(id=num+1, key=line[0], value=line[1])
session.add(diction)
session.commit()

handleData = HandleData('dictionary.txt')
handleData.make_data_to_str()
session.close()

部分数据显示如下

实现字典查询小工具(Python)_sqlalchemy_03


4、查询单词含义

最后我们通过输入一个单词,程序则会打印出相应的含义,代码如下

#!/usr/bin/env python
# -*- coding:utf-8 -*-
# @Time : 2018/5/30 13:47
# @Author : zhouyuyao
# @File : selectData.py
from sqlalchemy import create_engine, Integer, Column, String
from sqlalchemy.ext.declarative import declarative_base
from sqlalchemy.orm import sessionmaker

engine = create_engine('mysql+pymysql://databaseUser:databasePasswd@xxx.xxx.xxx.xxx/databaseName?charset=utf8')

Base = declarative_base()
class Dictionary(Base):
__tablename__ = 'dictionary'
id = Column(Integer, primary_key=True)
key = Column(String(50))
value = Column(String(50))

DBSession = sessionmaker(bind=engine)
session = DBSession()

# =+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=++=+=+=+=+=+=+=+=+=+=+=+=+= #

word = input("please input your a word:")
result =session.query(Dictionary).filter(Dictionary.key.like("%{0}%".format(word))).all()
for each in result:
print(each.id, each.key, each.value)

测试运行结果如下

实现字典查询小工具(Python)_mysql_04

但是,在一种情况下,会出现多个结果

实现字典查询小工具(Python)_mysql_05

如果我们想要精确查询单词,并且用户选择退出即退出,则我们可以在用户查询的时候进行如下优化

while 1:
word = input("please input your a word(exit with 'q'):")
result =session.query(Dictionary).filter(Dictionary.key.like("{0}".format(word))).all()
for each in result:
print(each.id, each.key, each.value)
if word == "q":
exit(0)

'''
exit()通常是用在子程序中用来终结程序用的,使用后程序自动结束,跳回操作系统。
exit(0) 表示程序正常退出,exit⑴/exit(-1)表示程序异常退出。
exit() 结束当前进程/当前程序/,在整个程序中,只要调用 exit ,就结束。
'''

这样我们就得到优化的结果了

实现字典查询小工具(Python)_sqlalchemy_06

 

 

 

 

 


参考资料

1. 使用mysql数据库插入中文全部变成问号

2.​ Mysql插入中文变为全问号???的问题 解决方法

3. 深入Mysql字符集设置

4.​​​l​​ MySQL 查看表结构简单命令

5. ​​https://baike.baidu.com/item/Exit%28%29/1883141?fr=aladdin​​

举报

相关推荐

0 条评论