增加 mysql 数据库支持
This commit is contained in:
1
Pipfile
1
Pipfile
@@ -12,6 +12,7 @@ redis = "*"
|
||||
tortoise-orm = "==0.15.4"
|
||||
aiohttp = "*"
|
||||
aioredis = "*"
|
||||
aiomysql = "*"
|
||||
|
||||
[requires]
|
||||
python_version = "3.6"
|
||||
|
||||
95
Pipfile.lock
generated
95
Pipfile.lock
generated
@@ -1,7 +1,7 @@
|
||||
{
|
||||
"_meta": {
|
||||
"hash": {
|
||||
"sha256": "2713e1b835a5e2c4ba46b3b038c7920be9dc5d168ac1b3f5727dc529637ba35b"
|
||||
"sha256": "66b4286bb6eb49e7de326a6a02aa8bec298691068e41d9b73dd28ab3e6c044df"
|
||||
},
|
||||
"pipfile-spec": 6,
|
||||
"requires": {
|
||||
@@ -34,6 +34,14 @@
|
||||
"index": "pypi",
|
||||
"version": "==3.6.2"
|
||||
},
|
||||
"aiomysql": {
|
||||
"hashes": [
|
||||
"sha256:5fd798481f16625b424eec765c56d712ac78a51f3bd0175a3de94107aae43307",
|
||||
"sha256:d89ce25d44dadb43cf2d9e4603bd67b7a0ad12d5e67208de013629ba648df2ba"
|
||||
],
|
||||
"index": "pypi",
|
||||
"version": "==0.0.20"
|
||||
},
|
||||
"aioredis": {
|
||||
"hashes": [
|
||||
"sha256:15f8af30b044c771aee6787e5ec24694c048184c7b9e54c3b60c750a4b93273a",
|
||||
@@ -62,6 +70,44 @@
|
||||
],
|
||||
"version": "==19.3.0"
|
||||
},
|
||||
"cffi": {
|
||||
"hashes": [
|
||||
"sha256:0b49274afc941c626b605fb59b59c3485c17dc776dc3cc7cc14aca74cc19cc42",
|
||||
"sha256:0e3ea92942cb1168e38c05c1d56b0527ce31f1a370f6117f1d490b8dcd6b3a04",
|
||||
"sha256:135f69aecbf4517d5b3d6429207b2dff49c876be724ac0c8bf8e1ea99df3d7e5",
|
||||
"sha256:19db0cdd6e516f13329cba4903368bff9bb5a9331d3410b1b448daaadc495e54",
|
||||
"sha256:2781e9ad0e9d47173c0093321bb5435a9dfae0ed6a762aabafa13108f5f7b2ba",
|
||||
"sha256:291f7c42e21d72144bb1c1b2e825ec60f46d0a7468f5346841860454c7aa8f57",
|
||||
"sha256:2c5e309ec482556397cb21ede0350c5e82f0eb2621de04b2633588d118da4396",
|
||||
"sha256:2e9c80a8c3344a92cb04661115898a9129c074f7ab82011ef4b612f645939f12",
|
||||
"sha256:32a262e2b90ffcfdd97c7a5e24a6012a43c61f1f5a57789ad80af1d26c6acd97",
|
||||
"sha256:3c9fff570f13480b201e9ab69453108f6d98244a7f495e91b6c654a47486ba43",
|
||||
"sha256:415bdc7ca8c1c634a6d7163d43fb0ea885a07e9618a64bda407e04b04333b7db",
|
||||
"sha256:42194f54c11abc8583417a7cf4eaff544ce0de8187abaf5d29029c91b1725ad3",
|
||||
"sha256:4424e42199e86b21fc4db83bd76909a6fc2a2aefb352cb5414833c030f6ed71b",
|
||||
"sha256:4a43c91840bda5f55249413037b7a9b79c90b1184ed504883b72c4df70778579",
|
||||
"sha256:599a1e8ff057ac530c9ad1778293c665cb81a791421f46922d80a86473c13346",
|
||||
"sha256:5c4fae4e9cdd18c82ba3a134be256e98dc0596af1e7285a3d2602c97dcfa5159",
|
||||
"sha256:5ecfa867dea6fabe2a58f03ac9186ea64da1386af2159196da51c4904e11d652",
|
||||
"sha256:62f2578358d3a92e4ab2d830cd1c2049c9c0d0e6d3c58322993cc341bdeac22e",
|
||||
"sha256:6471a82d5abea994e38d2c2abc77164b4f7fbaaf80261cb98394d5793f11b12a",
|
||||
"sha256:6d4f18483d040e18546108eb13b1dfa1000a089bcf8529e30346116ea6240506",
|
||||
"sha256:71a608532ab3bd26223c8d841dde43f3516aa5d2bf37b50ac410bb5e99053e8f",
|
||||
"sha256:74a1d8c85fb6ff0b30fbfa8ad0ac23cd601a138f7509dc617ebc65ef305bb98d",
|
||||
"sha256:7b93a885bb13073afb0aa73ad82059a4c41f4b7d8eb8368980448b52d4c7dc2c",
|
||||
"sha256:7d4751da932caaec419d514eaa4215eaf14b612cff66398dd51129ac22680b20",
|
||||
"sha256:7f627141a26b551bdebbc4855c1157feeef18241b4b8366ed22a5c7d672ef858",
|
||||
"sha256:8169cf44dd8f9071b2b9248c35fc35e8677451c52f795daa2bb4643f32a540bc",
|
||||
"sha256:aa00d66c0fab27373ae44ae26a66a9e43ff2a678bf63a9c7c1a9a4d61172827a",
|
||||
"sha256:ccb032fda0873254380aa2bfad2582aedc2959186cce61e3a17abc1a55ff89c3",
|
||||
"sha256:d754f39e0d1603b5b24a7f8484b22d2904fa551fe865fd0d4c3332f078d20d4e",
|
||||
"sha256:d75c461e20e29afc0aee7172a0950157c704ff0dd51613506bd7d82b718e7410",
|
||||
"sha256:dcd65317dd15bc0451f3e01c80da2216a31916bdcffd6221ca1202d96584aa25",
|
||||
"sha256:e570d3ab32e2c2861c4ebe6ffcad6a8abf9347432a37608fe1fbd157b3f0036b",
|
||||
"sha256:fd43a88e045cf992ed09fa724b5315b790525f2676883a6ea64e3263bae6549d"
|
||||
],
|
||||
"version": "==1.13.2"
|
||||
},
|
||||
"chardet": {
|
||||
"hashes": [
|
||||
"sha256:84ab92ed1c4d4f16916e05906b6b75a6c0fb5db821cc65e70cbd64a3e2a5eaae",
|
||||
@@ -75,6 +121,32 @@
|
||||
],
|
||||
"version": "==2.1.2"
|
||||
},
|
||||
"cryptography": {
|
||||
"hashes": [
|
||||
"sha256:02079a6addc7b5140ba0825f542c0869ff4df9a69c360e339ecead5baefa843c",
|
||||
"sha256:1df22371fbf2004c6f64e927668734070a8953362cd8370ddd336774d6743595",
|
||||
"sha256:369d2346db5934345787451504853ad9d342d7f721ae82d098083e1f49a582ad",
|
||||
"sha256:3cda1f0ed8747339bbdf71b9f38ca74c7b592f24f65cdb3ab3765e4b02871651",
|
||||
"sha256:44ff04138935882fef7c686878e1c8fd80a723161ad6a98da31e14b7553170c2",
|
||||
"sha256:4b1030728872c59687badcca1e225a9103440e467c17d6d1730ab3d2d64bfeff",
|
||||
"sha256:58363dbd966afb4f89b3b11dfb8ff200058fbc3b947507675c19ceb46104b48d",
|
||||
"sha256:6ec280fb24d27e3d97aa731e16207d58bd8ae94ef6eab97249a2afe4ba643d42",
|
||||
"sha256:7270a6c29199adc1297776937a05b59720e8a782531f1f122f2eb8467f9aab4d",
|
||||
"sha256:73fd30c57fa2d0a1d7a49c561c40c2f79c7d6c374cc7750e9ac7c99176f6428e",
|
||||
"sha256:7f09806ed4fbea8f51585231ba742b58cbcfbfe823ea197d8c89a5e433c7e912",
|
||||
"sha256:90df0cc93e1f8d2fba8365fb59a858f51a11a394d64dbf3ef844f783844cc793",
|
||||
"sha256:971221ed40f058f5662a604bd1ae6e4521d84e6cad0b7b170564cc34169c8f13",
|
||||
"sha256:a518c153a2b5ed6b8cc03f7ae79d5ffad7315ad4569b2d5333a13c38d64bd8d7",
|
||||
"sha256:b0de590a8b0979649ebeef8bb9f54394d3a41f66c5584fff4220901739b6b2f0",
|
||||
"sha256:b43f53f29816ba1db8525f006fa6f49292e9b029554b3eb56a189a70f2a40879",
|
||||
"sha256:d31402aad60ed889c7e57934a03477b572a03af7794fa8fb1780f21ea8f6551f",
|
||||
"sha256:de96157ec73458a7f14e3d26f17f8128c959084931e8997b9e655a39c8fde9f9",
|
||||
"sha256:df6b4dca2e11865e6cfbfb708e800efb18370f5a46fd601d3755bc7f85b3a8a2",
|
||||
"sha256:ecadccc7ba52193963c0475ac9f6fa28ac01e01349a2ca48509667ef41ffd2cf",
|
||||
"sha256:fb81c17e0ebe3358486cd8cc3ad78adbae58af12fc2bf2bc0bb84e8090fa5ce8"
|
||||
],
|
||||
"version": "==2.8"
|
||||
},
|
||||
"hiredis": {
|
||||
"hashes": [
|
||||
"sha256:01b577f84c20ecc9c07fc4c184231b08e3c3942de096fa99978e053de231c423",
|
||||
@@ -149,6 +221,20 @@
|
||||
],
|
||||
"version": "==4.7.3"
|
||||
},
|
||||
"pycparser": {
|
||||
"hashes": [
|
||||
"sha256:a988718abfad80b6b157acce7bf130a30876d27603738ac39f140993246b25b3",
|
||||
"sha256:fdbae4e6f505ece28ab3b96f5c103a1d87e42845d249c33a097f14abb2bdad3e"
|
||||
],
|
||||
"version": "==2.19"
|
||||
},
|
||||
"pymysql": {
|
||||
"hashes": [
|
||||
"sha256:95f057328357e0e13a30e67857a8c694878b0175797a9a203ee7adbfb9b1ec5f",
|
||||
"sha256:9ec760cbb251c158c19d6c88c17ca00a8632bac713890e465b2be01fdc30713f"
|
||||
],
|
||||
"version": "==0.9.2"
|
||||
},
|
||||
"pypika": {
|
||||
"hashes": [
|
||||
"sha256:a4d80829a065047c39b7838aafb440761bd9a306977c0e6f78caf5eaa056c9e4"
|
||||
@@ -163,6 +249,13 @@
|
||||
"index": "pypi",
|
||||
"version": "==3.3.11"
|
||||
},
|
||||
"six": {
|
||||
"hashes": [
|
||||
"sha256:1f1b7d42e254082a9db6279deae68afb421ceba6158efa6131de7b3003ee93fd",
|
||||
"sha256:30f610279e8b2578cab6db20741130331735c781b56053c59c4076da27f06b66"
|
||||
],
|
||||
"version": "==1.13.0"
|
||||
},
|
||||
"toml": {
|
||||
"hashes": [
|
||||
"sha256:229f81c57791a41d65e399fc06bf0848bab550a9dfd5ed66df18ce5f05e73d5c",
|
||||
|
||||
@@ -1,13 +1,21 @@
|
||||
[app]
|
||||
env = "dev"
|
||||
env = 'dev'
|
||||
debug = true
|
||||
query_interval = 1.5 # 查询间隔
|
||||
|
||||
[web]
|
||||
# Comming soon.
|
||||
ip = "0.0.0.0"
|
||||
ip = '0.0.0.0'
|
||||
port = 8081
|
||||
|
||||
[db]
|
||||
engine = 'sqlite' # 默认使用 sqlite,支持 mysql
|
||||
# host = '127.0.0.1'
|
||||
# port = 3306
|
||||
# user = 'user'
|
||||
# password = 'password'
|
||||
# database = 'py12306'
|
||||
|
||||
[[user]]
|
||||
enable = true
|
||||
id = 1 # 用户唯一 Id,数字,不可重复
|
||||
@@ -18,31 +26,31 @@ password = 'your 12306 password'
|
||||
[[query]]
|
||||
id = 1
|
||||
user_id = 1
|
||||
left_dates = ["2020-01-25", "2019-01-26"]
|
||||
members = ["宝玉", "宝钗"]
|
||||
left_dates = ['2020-01-25', '2019-01-26']
|
||||
members = ['宝玉', '宝钗']
|
||||
seats = ['硬卧', '硬座']
|
||||
train_numbers = ["K356", "K1172", "K4184"]
|
||||
train_numbers = ['K356', 'K1172', 'K4184']
|
||||
stations = ['北京', '深圳']
|
||||
|
||||
[[query]]
|
||||
enable = true # 是否启用,默认启用
|
||||
id = 2
|
||||
user_id = 0 # 将会使用指定的用户下单
|
||||
left_dates= [ "2020-01-25", "2020-01-26" ] # 出发日期 :Array
|
||||
left_dates= [ '2020-01-25', '2020-01-26' ] # 出发日期
|
||||
stations = ['北京', '深圳', '北京', '广州'] # 车站 支持多个车站同时查询
|
||||
members = [ "宝玉", "黛玉" ] # 乘客姓名,会根据当前账号自动识别乘客类型 购买儿童票 设置两个相同的姓名即可,程序会自动识别 如 ['贾琏', '贾琏']
|
||||
members = [ '宝玉', '黛玉' ] # 乘客姓名,会根据当前账号自动识别乘客类型 购买儿童票 设置两个相同的姓名即可,程序会自动识别 如 ['贾琏', '贾琏']
|
||||
allow_less_member = false # 是否允许余票不足时提交部分乘客
|
||||
seats = [ '硬卧', '硬座' ] # 筛选座位 有先后顺序 可用值: 一等座, 二等座, 商务座, 特等座, 硬座, 软座, 硬卧, 二等卧, 软卧, 一等卧, 高级软卧, 动卧, 高级动卧, 无座
|
||||
train_numbers = [ "K356", "K1172", "K4184" ] # 筛选车次 可以为空,为空则所有车次都可以提交 如 []
|
||||
train_numbers = [ 'K356', 'K1172', 'K4184' ] # 筛选车次 可以为空,为空则所有车次都可以提交 如 []
|
||||
except_train_numbers = [] # 筛选车次,排除车次 train_numbers 和 except_train_numbers 不可同时存在
|
||||
periods = ['00:00','24:00'] # 筛选时间
|
||||
|
||||
[redis]
|
||||
enable = false
|
||||
host = "127.0.0.1"
|
||||
host = '127.0.0.1'
|
||||
port = 6379
|
||||
db = 1
|
||||
password = ""
|
||||
password = ''
|
||||
|
||||
[proxy]
|
||||
enable = false
|
||||
@@ -53,12 +61,12 @@ url = 'http://127.0.0.1:8081/get_ip?&rule=12306'
|
||||
[notifaction.ding_talk]
|
||||
# 钉钉通知 使用说明 https://ding-doc.dingtalk.com/doc#/serverapi2/qf2nxq
|
||||
enable = true
|
||||
access_token = ""
|
||||
access_token = ''
|
||||
|
||||
[notifaction.bark]
|
||||
# Bark 推送到ios设备 参考 https://www.v2ex.com/t/467407
|
||||
enable = false
|
||||
push_url = ""
|
||||
push_url = ''
|
||||
|
||||
[notifaction.email]
|
||||
# 邮箱配置
|
||||
|
||||
@@ -34,8 +34,7 @@ class ConfigInstance:
|
||||
'host': '127.0.0.1', 'port': 6379, 'db': 0, 'password': None, 'decode_responses': True
|
||||
}
|
||||
DATABASE = {
|
||||
'engine': 'sqlite', # or mysql
|
||||
'url': f'sqlite://{DATA_DIR}db.sqlite3',
|
||||
'db_url': f'sqlite://{DATA_DIR}db.sqlite3',
|
||||
}
|
||||
Notifaction = {}
|
||||
|
||||
@@ -52,6 +51,10 @@ class ConfigInstance:
|
||||
configs = toml.load(file_path)
|
||||
self._configs = SuperDict(configs)
|
||||
self.REDIS.update(configs.get('redis', {}))
|
||||
db = configs.get('db', {})
|
||||
if db and not db.get('db_url'):
|
||||
db['db_url'] = f"{db.get('engine')}://{db.get('user')}:{db.get('password')}@{db.get('host')}:{db.get('port')}/{db.get('database')}"
|
||||
self.DATABASE.update(configs.get('db', {}))
|
||||
self.DEBUG = self._configs.get('app.debug', self.DEBUG)
|
||||
self.Notifaction: dict = self._configs.get('notifaction', self.Notifaction)
|
||||
return self
|
||||
@@ -125,7 +128,7 @@ class App:
|
||||
|
||||
async def init_db(self):
|
||||
await Tortoise.init(
|
||||
db_url=Config.DATABASE['url'],
|
||||
db_url=Config.DATABASE['db_url'],
|
||||
modules={'models': ['app.models']})
|
||||
# Generate the schema
|
||||
await Tortoise.generate_schemas()
|
||||
|
||||
@@ -220,7 +220,7 @@ class Ticket(TimestampMixin, BaseModel):
|
||||
left_station = fields.CharField(default='', max_length=255)
|
||||
arrive_station = fields.CharField(default='', max_length=255)
|
||||
order_text = fields.CharField(default='', max_length=255)
|
||||
secret_str = fields.CharField(default='', max_length=255)
|
||||
secret_str = fields.CharField(default='', max_length=1000)
|
||||
left_time = fields.CharField(default='', max_length=255)
|
||||
arrive_time = fields.CharField(default='', max_length=255)
|
||||
# { 'name': seat, 'id': seat_id, 'raw': raw, 'order_id': TrainSeat.order_id[seat] }
|
||||
|
||||
@@ -358,6 +358,7 @@ class OrderTicket:
|
||||
else:
|
||||
pass
|
||||
Logger.info(f'第 {wait_count} 次排队,请耐心等待')
|
||||
await asyncio.sleep(1)
|
||||
|
||||
return False
|
||||
|
||||
|
||||
Reference in New Issue
Block a user