InvalidRequestError: VARCHAR在MySQL方言上需要指定一个长度。
InvalidRequestError: VARCHAR在MySQL方言上需要指定一个长度。
我正在尝试在运行12.04的Ubuntu机器上使用mysql创建一个远程数据库。
它有一个启用了远程登录且没有密码的root用户。我已经启动了服务器。
运行
sudo netstat -tap | grep mysql
的输出显示
tcp 0 0 localhost:mysql *:* LISTEN 13246/mysqld
我使用以下命令创建了一个名为nwtopology的数据库(如上所述,root用户尚未设置密码)。
create database nwtopology grant all privileges on *.* to [email protected] FLUSH PRIVILEGES;
我在同样运行Ubuntu 12.04的客户端机器上使用一个Python脚本通过sqlalchemy连接到远程mysql数据库。
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非常陌生。