通过脚本在SQL上插入Schema,csv和数据库

krerum 发布于 2019-11-08 bash 最后更新 2019-11-08 22:59 19 浏览

我正在创建一个脚本,按照这个顺序创建我,一个数据库,插入表格,然后插入csv 我修改帖子,如果你想要一个xml输出的例子告诉我,我添加所有的代码

#! /bin/bash
definitivo='definitivo'
database='test'
schema='esquema'
XML='Telegramas.xml'
tempschema='tempschema'
rm -f '$definitivo'
password='new_password'
user='root'
table_name='test'
function charge_files
{
    if [[ -f $XML ]]
    then
        echo '============================='
        echo '|        LOADED XML         |'
        echo '============================='
    else
        echo '============================='
        echo '|      XML NOT LOADED       |'
        echo '============================='
        exit 1
    fi
}
function extract
{
    grep -e 'RecordStart' -e 'Telegram' "$XML" | \
        awk -F '"' '{ if( NF > 10 ) { conname = $8; contype = $12 } else \
                    printf("%s,%s,%s,%s,%s,%d,%d,%d\n", \
                    conname, contype, $2, $4, $6, substr($8, 36, 4), substr($8, 40, 4), \
                    substr($8, 50, 4) ); }' >> definitivo
}
function create_schema
{
    if [[ -f $schema ]]
    then
        echo '============================='
        echo '|      LOADED SCHEMA        |'
        echo '============================='
    else
      #se ha de cambiar la variable del create table
        cat >> "$schema" <<'EOF'
CREATE TABLE test (
KKID INTEGER NOT NULL AUTO_INCREMENT,
conection VARCHAR(20) NOT NULL,
ip VARCHAR(20) NOT NULL,
time  TIMESTAMP NOT NULL,
service VARCHAR(20) NOT NULL,
frameformat VARCHAR(20) NOT NULL,
id_dispositivo VARCHAR(20) NOT NULL,
id_origen VARCHAR(20) NOT NULL,
id_valor VARCHAR(20) NOT NULL
);
EOF
    fi
}
function upload
{
    #Create database
    echo "create database $database;" | mysql -u "$user" -p"$password"
    # Upload the schema to sqlite3 database
    mysql -u "$user" -p"$password" "$database" < "$schema"
# Upload the csv to a temp table
    echo "LOAD DATA LOCAL INFILE $definitivo INTO TABLE $table_name FIELDS TERMINATED BY ','" | mysql -u "$user" -p"$password" --local_infile=1 $database
# Remove duplicate fields
    mysql -u "$user" -p"$password" --local_infile=1 $database -e "ALTER IGNORE TABLE $table_name ADD UNIQUE (conection, ip, time, service, frameformat, id_dispositivo, id_origen, id_valor);"
}
charge_files
extract
create_schema
upload
它给了我一个创建表的问题,我不知道如何去做,帮助 我从脚本Errors中添加了一张包含错误的照片 问题在于功能上传
已邀请:

jdolor

赞同来自:

阅读你的错误:

  1. 数据库'test'已经存在。可能来自之前的脚本运行,确定没有真正的问题。
  2. 关于密码的警告。警告只是警告,这里没有严重问题,只需确保您保护脚本并记住您的数据库密码现在位于shell历史记录中。
  3. 表定义不正确,您的SQL语法错误。
解决这个问题的最好方法是直接在数据库上运行SQL进行调试(使用phpmyadmin,mysql workbench,...),然后将其放入脚本中。 在这里,您可以定义一个自动增量列(KKID),但不要将其定义为键。像这样做:
CREATE TABLE test (
    KKID INTEGER NOT NULL AUTO_INCREMENT,
    conection VARCHAR(20) NOT NULL,
    ip VARCHAR(20) NOT NULL,
    time  TIMESTAMP NOT NULL,
    service VARCHAR(20) NOT NULL,
    frameformat VARCHAR(20) NOT NULL,
    id_dispositivo VARCHAR(20) NOT NULL,
    id_origen VARCHAR(20) NOT NULL,
    id_valor VARCHAR(20) NOT NULL,
    PRIMARY KEY (`KKID`)
);
我在声明id_valor之后添加了一个逗号,并且
PRIMARY KEY (`KKID`)
因此,您认为上传的问题实际上是基于表格未创建的事实。