天天看點

flask 建表語句和常見報錯

<code>$ cat models</code><code>/</code><code>user.py</code>

<code>#!/usr/bin/env python</code>

<code># encoding: utf-8</code>

<code>__author__ </code><code>=</code> <code>'Andy'</code>

<code>from</code> <code>extensions </code><code>import</code> <code>db</code>

<code>from</code> <code>datetime </code><code>import</code> <code>datetime</code>

<code>class</code> <code>User(db.Model):</code>

<code>    </code><code>__tablename__ </code><code>=</code> <code>'user'</code>

<code>    </code><code>_id </code><code>=</code> <code>db.Column(db.Integer, primary_key</code><code>=</code><code>True</code><code>, autoincrement</code><code>=</code><code>True</code><code>)</code>

<code>    </code><code>name </code><code>=</code> <code>db.Column(db.String(</code><code>256</code><code>), nullable</code><code>=</code><code>False</code><code>, unique</code><code>=</code><code>True</code><code>)</code>

<code>    </code><code>zh_name </code><code>=</code> <code>db.Column(db.String(</code><code>256</code><code>), nullable</code><code>=</code><code>True</code><code>)</code>

<code>    </code><code>password </code><code>=</code> <code>db.Column(db.String(</code><code>256</code><code>), nullable</code><code>=</code><code>False</code><code>)</code>

<code>    </code><code>_type </code><code>=</code> <code>db.Column(db.Integer, nullable</code><code>=</code><code>False</code><code>, default</code><code>=</code><code>1</code> <code>)</code>

<code>    </code><code>#COMMENT='1 is User;2 is Admin, 3 is SuperAdmin'</code>

<code>    </code><code>sex </code><code>=</code> <code>db.Column(db.Enum(</code><code>'M'</code><code>, </code><code>'F'</code><code>), nullable</code><code>=</code><code>False</code><code>)</code>

<code>    </code><code>email </code><code>=</code> <code>db.Column(db.String(</code><code>256</code><code>), nullable</code><code>=</code><code>True</code><code>, unique</code><code>=</code><code>True</code><code>)</code>

<code>    </code><code>favicon</code><code>=</code> <code>db.Column(db.String(</code><code>1024</code><code>))</code>

<code>    </code><code>create_time </code><code>=</code> <code>db.Column(db.DateTime, nullable</code><code>=</code><code>False</code><code>, default</code><code>=</code><code>datetime.now())</code>

<code>    </code><code>last_update </code><code>=</code> <code>db.Column(db.DateTime(), nullable</code><code>=</code><code>False</code><code>, default</code><code>=</code><code>datetime.now())</code>

執行建表

sudo python manage.py db_setup

報錯

sqlalchemy.exc.InternalError: (InternalError) (1071, u'Specified key was too long; max key length is 767 bytes')

原因:

将字段設定成為unique後mysql會自動将唯一性索引建立在該字段上,,而對于維護唯一性索引又會存在着系統開銷,是以就會出現這種問題,一方面提供唯一性索引,另外避免維護過長的索引造成的開銷問題。

另外在mysql中還有一個問題必須注意,那就是utf-8預設是一個字元占用三個位元組,對于GBK這些編碼方式占用的是2個位元組,是以如果你的字元集編碼格式為utf-8的話,那麼767/3=255個字元,隻能支援到255個字元,而非767,這點需要特别注意。

解決辦法,将有unique的字段變小,變成128 即可

本文轉自殘劍部落格51CTO部落格,原文連結http://blog.51cto.com/cuidehua/1767117如需轉載請自行聯系原作者

cuizhiliang