bugfix
This commit is contained in:
parent
d6a2098f13
commit
5629a79c48
@ -2,10 +2,14 @@
|
||||
|
||||
数据库表用一个json格式文件或数据来定义,具体规范如下
|
||||
{
|
||||
"name"
|
||||
"title"
|
||||
"primary"
|
||||
"catelog" # 可选项:entity relation dimession indication
|
||||
"summary":[ # 仅一条记录
|
||||
{
|
||||
"name" # 表名
|
||||
"title" # 表标题
|
||||
"primary" # 主键,等于"id",所有表的主键均为id
|
||||
"catelog" # 可选项:entity relation dimession indication
|
||||
}
|
||||
]
|
||||
"fields":[ # 字段
|
||||
{
|
||||
"name"
|
||||
|
||||
@ -1,6 +1,6 @@
|
||||
[metadata]
|
||||
name=xls2ddl
|
||||
version = 1.0.4
|
||||
version = 1.1.0
|
||||
description = a xlsx file to database ddl converter
|
||||
author = "yu moqing"
|
||||
author_email = "yumoqing@gmail.com"
|
||||
@ -15,6 +15,7 @@ install_requires =
|
||||
|
||||
[options.entry_points]
|
||||
console_scripts =
|
||||
json2ddl = xls2ddl.json2ddl:main
|
||||
xls2ddl = xls2ddl.xls2ddl:main
|
||||
xls2ui = xls2ddl.xls2ui:main
|
||||
json2xlsx = xls2ddl.json2xlsx:main
|
||||
|
||||
71
xls2ddl/json2ddl.py
Normal file
71
xls2ddl/json2ddl.py
Normal file
@ -0,0 +1,71 @@
|
||||
# -*- coding:utf-8 -*-
|
||||
import sys
|
||||
import io
|
||||
import sys
|
||||
from traceback import print_exc
|
||||
|
||||
import codecs
|
||||
import json
|
||||
from sqlor.ddl_template_sqlserver import sqlserver_ddl_tmpl
|
||||
from sqlor.ddl_template_mysql import mysql_ddl_tmpl
|
||||
from sqlor.ddl_template_oracle import oracle_ddl_tmpl
|
||||
from sqlor.ddl_template_postgresql import postgresql_ddl_tmpl
|
||||
|
||||
from appPublic.myTE import MyTemplateEngine
|
||||
from appPublic.folderUtils import listFile
|
||||
from xls2ddl.xlsxData import CRUDData, xlsxFactory
|
||||
|
||||
tmpls = {
|
||||
"sqlserver":sqlserver_ddl_tmpl,
|
||||
"mysql":mysql_ddl_tmpl,
|
||||
"oracle":oracle_ddl_tmpl,
|
||||
"postgresql":postgresql_ddl_tmpl
|
||||
}
|
||||
|
||||
def xls2ddl(xlsfile,dbtype):
|
||||
data = None
|
||||
if xlsfile.endswith('.json'):
|
||||
with codecs.open(xlsfile,'r','utf-8') as f:
|
||||
data = json.load(f)
|
||||
if data is None:
|
||||
print(xlsfile, 'not data return')
|
||||
return
|
||||
tmpl = tmpls.get(dbtype.lower())
|
||||
if tmpl is None:
|
||||
raise Exception('%s database not implemented' % dbtype)
|
||||
e = MyTemplateEngine([])
|
||||
s = e.renders(tmpl,data)
|
||||
return s
|
||||
|
||||
def model2ddl(folder,dbtype):
|
||||
ddl_str = ''
|
||||
for f in listFile(folder, suffixs=['json']):
|
||||
try:
|
||||
ddl_str += f'\n-- {f}\n'
|
||||
s = xls2ddl(f,dbtype)
|
||||
ddl_str = f"{ddl_str}\n{s}\n"
|
||||
|
||||
except Exception as e:
|
||||
print('Exception:',e,'f=',f)
|
||||
print_exc()
|
||||
return ddl_str
|
||||
|
||||
def main():
|
||||
##解决windows 终端中输出中文出现
|
||||
# UnicodeEncodeError: 'gbk' codec can't encode character '\xa0' in position 20249
|
||||
# 错误
|
||||
# BEGIN
|
||||
# sys.stdout = io.TextIOWrapper(sys.stdout.buffer,encoding='utf8')
|
||||
sys.stdout.reconfigure(encoding='utf-8')
|
||||
#
|
||||
# END
|
||||
if len(sys.argv) < 3:
|
||||
print('Usage:%s dbtype folder' % sys.argv[0])
|
||||
sys.exit(1)
|
||||
|
||||
s = model2ddl(sys.argv[2], sys.argv[1])
|
||||
print(s)
|
||||
|
||||
if __name__ == '__main__':
|
||||
main()
|
||||
|
||||
@ -23,7 +23,7 @@ usage:
|
||||
xls2crud.py dbname models_dir uidir
|
||||
"""
|
||||
|
||||
def build_dbdesc(models_dir: str) -> dict:
|
||||
def build_dbdesc(models_dir: list) -> dict:
|
||||
print(f'{models_dir=}')
|
||||
mdirs = []
|
||||
if isinstance(models_dir, list):
|
||||
@ -38,6 +38,12 @@ def build_dbdesc(models_dir: str) -> dict:
|
||||
d = x.get_data()
|
||||
tbname = d.summary[0].name
|
||||
db_desc.update({tbname:d})
|
||||
for f in listFile(models_dir, suffixs=['.json']):
|
||||
print(f'{f} handle ...')
|
||||
with codecs.open(f, 'r', 'utf-8') as fh:
|
||||
d = json.load(fh)
|
||||
tbname = d['summary'][0]['name']
|
||||
db_desc.update({tbname:d})
|
||||
return db_desc
|
||||
|
||||
def subtable2toolbar(desc):
|
||||
|
||||
Loading…
x
Reference in New Issue
Block a user