62 lines
1.8 KiB
Python
62 lines
1.8 KiB
Python
mysql_ddl_tmpl = """{% macro typeStr(type,len,dec) %}
|
||
{%- if type=='str' -%}
|
||
VARCHAR({{len}})
|
||
{%- elif type=='char' -%}
|
||
CHAR({{len}})
|
||
{%- elif type=='long' or type=='int' or type=='short' -%}
|
||
int
|
||
{%- elif type=='long' -%}
|
||
bigint
|
||
{%- elif type=='float' or type=='double' or type=='ddouble' -%}
|
||
double({{len}},{{dec}})
|
||
{%- elif type=='date' -%}
|
||
date
|
||
{%- elif type=='time' -%}
|
||
time
|
||
{%- elif type=='datetime' -%}
|
||
datetime
|
||
{%- elif type=='timestamp' -%}
|
||
TIMESTAMP DEFAULT CURRENT_TIMESTAMP
|
||
{%- elif type=='text' -%}
|
||
longtext CHARACTER SET utf8mb4 COLLATE utf8mb4_unicode_ci
|
||
{%- elif type=='bin' -%}
|
||
longblob
|
||
{%- else -%}
|
||
{{type}}
|
||
{%- endif %}
|
||
{%- endmacro %}
|
||
|
||
{%- macro defaultValue(defaultv) %}
|
||
{%- if defaultv %} DEFAULT '{{defaultv}}'{%- endif -%}
|
||
{%- endmacro %}
|
||
|
||
{% macro nullStr(nullable) %}
|
||
{%- if nullable=='no' -%}
|
||
NOT NULL
|
||
{%- endif -%}
|
||
{% endmacro %}
|
||
{% macro primary() %}
|
||
,primary key({{','.join(summary[0].primary)}})
|
||
{% endmacro %}
|
||
-- 建库时请用以下语句,支持emoji字符
|
||
-- CREATE DATABASE mydb CHARACTER SET utf8mb4 COLLATE utf8mb4_unicode_ci;
|
||
drop table if exists {{summary[0].name}};
|
||
CREATE TABLE {{summary[0].name}}
|
||
(
|
||
{% for field in fields %}
|
||
`{{field.name}}` {{typeStr(field.type,field.length,field.dec)}} {{nullStr(field.nullable)}} {{defaultValue(field.default)}} {%if field.title -%} comment '{{field.title}}'{%- endif %}{%- if not loop.last -%},{%- endif -%}
|
||
{% endfor %}
|
||
{% if summary[0].primary and len(summary[0].primary)>0 %}
|
||
{{primary()}}
|
||
{% endif %}
|
||
)
|
||
CHARACTER SET utf8mb4
|
||
COLLATE utf8mb4_unicode_ci
|
||
engine=innodb
|
||
{% if summary[0].title %}comment '{{summary[0].title}}'{% endif %}
|
||
;
|
||
{% for v in indexes %}
|
||
CREATE {% if v.idxtype=='unique' %}UNIQUE{% endif %} INDEX {{summary[0].name}}_{{v.name}} ON {{summary[0].name}}({{",".join(v.idxfields)}});
|
||
{%- endfor -%}
|
||
"""
|