2013-05-09 2 views
8

12.04を実行しているUbuntuマシンでmysqlを使用してリモートデータベースを作成しようとしています。InvalidRequestError:dialect mysqlでVARCHARの長さが必要です

リモートログインが有効でパスワードがないrootユーザーがいます。サーバーを起動しました。

sudo netstat -tap | grep mysql 

出力は、私が使用してnwtopologyと呼ばれるデータベースを作成している

tcp  0  0 localhost:mysql   *:*      LISTEN  13246/mysqld 

を示し(言及したルートとしてはまだパスワードを持っていません。)

create database nwtopology 
grant all privileges on *.* to [email protected] 
FLUSH PRIVILEGES; 

からUbuntuを実行するクライアントマシン12.04私はPythonスクリプトを使用して、リモートのmysqlデータベースにsqlalを使用して接続しますケミ。

from pox.core import core 
import pox.openflow.libopenflow_01 as of 
import re 
import datetime 
import time 
from sqlalchemy import create_engine, ForeignKey 
from sqlalchemy import Column, Date, Integer, String 
from sqlalchemy.ext.declarative import declarative_base 
from sqlalchemy.orm import relationship, backref 
from sqlalchemy import create_engine 
from sqlalchemy.orm import sessionmaker 
from sqlalchemy.sql.expression import exists 

log = core.getLogger() 
engine = create_engine('mysql://[email protected]/nwtopology', echo=False) 
Base = declarative_base() 
Session = sessionmaker(bind=engine) 
session = Session() 

class SourcetoPort(Base): 
    """""" 
    __tablename__ = 'source_to_port' 
    id = Column(Integer, primary_key=True) 
    port_no  = Column(Integer) 
    src_address = Column(String,index=True) 

    #----------------------------------------- 
    def __init__(self, src_address,port_no): 
     """""" 
     self.src_address = src_address 
     self.port_no  = port_no 


#create tables 
Base.metadata.create_all(engine) 

最後の行

Base.metadata.create_all(engine) 

リターンエラー

File "/usr/lib/python2.7/dist-packages/sqlalchemy/sql/compiler.py", line 1699, in visit_string 
    return self.visit_VARCHAR(type_) 
    File "/usr/lib/python2.7/dist-packages/sqlalchemy/dialects/mysql/base.py", line 1654, in visit_VARCHAR 
    self.dialect.name) 
InvalidRequestError: VARCHAR requires a length on dialect mysql 

これは何を意味するのでしょうか?どのように私はMySQLのVARCHARの長さを設定できますか?私はsqlalchemyとmysqlの新機能です。

答えて

12

あなたString列に長さを追加します。

src_address = Column(String(16), index=True) 
関連する問題