Как переносить изменения, сделанные в моделях SQliteStudio в Flask (SQlAlchemy) [duplicate]

В основном функция mail() отключена на общем хостинге. Лучше использовать SMTP. Лучшим вариантом будет Gmail или SendGrid.


SMTPconfig.php

<?php 
    $SmtpServer="smtp.*.*";
    $SmtpPort="2525"; //default
    $SmtpUser="***";
    $SmtpPass="***";
?>

SMTPmail.php

<?php
class SMTPClient
{

    function SMTPClient ($SmtpServer, $SmtpPort, $SmtpUser, $SmtpPass, $from, $to, $subject, $body)
    {

        $this->SmtpServer = $SmtpServer;
        $this->SmtpUser = base64_encode ($SmtpUser);
        $this->SmtpPass = base64_encode ($SmtpPass);
        $this->from = $from;
        $this->to = $to;
        $this->subject = $subject;
        $this->body = $body;

        if ($SmtpPort == "") 
        {
            $this->PortSMTP = 25;
        }
        else
        {
            $this->PortSMTP = $SmtpPort;
        }
    }

    function SendMail ()
    {
        $newLine = "\r\n";
        $headers = "MIME-Version: 1.0" . $newLine;  
        $headers .= "Content-type: text/html; charset=iso-8859-1" . $newLine;  

        if ($SMTPIN = fsockopen ($this->SmtpServer, $this->PortSMTP)) 
        {
            fputs ($SMTPIN, "EHLO ".$HTTP_HOST."\r\n"); 
            $talk["hello"] = fgets ( $SMTPIN, 1024 ); 
            fputs($SMTPIN, "auth login\r\n");
            $talk["res"]=fgets($SMTPIN,1024);
            fputs($SMTPIN, $this->SmtpUser."\r\n");
            $talk["user"]=fgets($SMTPIN,1024);
            fputs($SMTPIN, $this->SmtpPass."\r\n");
            $talk["pass"]=fgets($SMTPIN,256);
            fputs ($SMTPIN, "MAIL FROM: <".$this->from.">\r\n"); 
            $talk["From"] = fgets ( $SMTPIN, 1024 ); 
            fputs ($SMTPIN, "RCPT TO: <".$this->to.">\r\n"); 
            $talk["To"] = fgets ($SMTPIN, 1024); 
            fputs($SMTPIN, "DATA\r\n");
            $talk["data"]=fgets( $SMTPIN,1024 );
            fputs($SMTPIN, "To: <".$this->to.">\r\nFrom: <".$this->from.">\r\n".$headers."\n\nSubject:".$this->subject."\r\n\r\n\r\n".$this->body."\r\n.\r\n");
            $talk["send"]=fgets($SMTPIN,256);
            //CLOSE CONNECTION AND EXIT ... 
            fputs ($SMTPIN, "QUIT\r\n"); 
            fclose($SMTPIN); 
            // 
        } 
        return $talk;
    } 
}
?>

contact_email.php

<?php 
include('SMTPconfig.php');
include('SMTPmail.php');
if($_SERVER["REQUEST_METHOD"] == "POST")
{
    $to = "";
    $from = $_POST['email'];
    $subject = "Enquiry";
    $body = $_POST['name'].'</br>'.$_POST['companyName'].'</br>'.$_POST['tel'].'</br>'.'<hr />'.$_POST['message'];
    $SMTPMail = new SMTPClient ($SmtpServer, $SmtpPort, $SmtpUser, $SmtpPass, $from, $to, $subject, $body);
    $SMTPChat = $SMTPMail->SendMail();
}
?>
3
задан Brad Larson 23 February 2016 в 21:44
поделиться

2 ответа

Самый простой ответ - не пытаться это сделать. Вместо этого, ваши миграции Alembic представляют собой полный макет базы данных. Затем любые сделанные вами миграции будут основываться на изменениях в существующей базе данных.

Чтобы сделать начальную миграцию, если у вас уже есть база данных, временно указывайте на пустую базу данных и запустите alembic revision --autogenerate -m "base". Затем, вернитесь к фактической базе данных и запустите alembic stamp head, чтобы сказать, что текущее состояние базы данных представлено последней миграцией, фактически не запуская ее.

Если вы не хотите этого делать по какой-то причине вы можете не использовать --autogenerate и вместо этого создавать пустые ревизии, которые вы заполняете с помощью операций, которые вы хотите. Alembic не остановит вас от этого, это гораздо менее удобно.

3
ответ дан davidism 21 August 2018 в 02:53
поделиться
  • 1
    @ScotchAndSoda Если вы вручную изменили схему базы данных за пределами Alembic, то вы больше не находитесь в цепочке ревизий . Это точка Дэвидзима. Вы должны создать новую ревизию между текущим состоянием базы данных и где вы хотите «объединить» состояние базы данных. И затем выполните это. Вы никогда не должны ничего делать, кроме добавления / удаления / переименования в сценарии миграции. В противном случае это не сценарий миграции. Сценарий миграции перемещает вас из состояния A схемы в состояние схемы B. Это никогда не должно быть условным. – aruisdante 25 June 2014 в 21:38
  • 2
    @aruisdante - это развертывание веб-сервера на нескольких машинах и запуск миграции в рамках этой процедуры. Таким образом, в каждом развертывании еще нет существующей цепи миграции! В этой ситуации alembic попытается выполнить все миграции и изменить уже обновленную и вновь созданную схему, чего я хочу избежать! – ScotchAndSoda 17 July 2014 в 22:17
  • 3
    Затем вы должны создать ревизии для каждого из тех экземпляров, которые приводят их к текущей голове. Это довольно просто сделать, если вы можете использовать опцию --autogenerate. Вам не нужно держать эти «довести до скорости» ревизии, они всего лишь одноразовые, чтобы получить все в последовательное состояние. – aruisdante 18 July 2014 в 14:46
  • 4
    Разумеется, вам нужно будет использовать команду stamp для установки фактической версии вашей версии версии главы после миграции, так как вы создадите новую версию с этим подходом. – aruisdante 18 July 2014 в 16:24
  • 5
    В случае нового развертывания просто создайте сценарий «инициализации», который просто выдает инструкцию SQLalchemy create_all, а затем использует «штамп», чтобы пометить базу данных как находящуюся в голове. Это описано в документации Alembic. – aruisdante 18 July 2014 в 17:40
0
ответ дан Charles L. 31 October 2018 в 22:01
поделиться
Другие вопросы по тегам:

Похожие вопросы: