Reputation: 8791
I'm trying to useSQLAlchemy to create a database, but when I run
meta.create_all()
I get
super(Connection, self).__init__(*args, **kwargs2)
sqlalchemy.exc.OperationalError: (OperationalError) (2002, "Can't connect to local MySQL server through socket '/tmp/mysql.sock' (2)") None None
This is my code:
from sqlalchemy import *
from sqlalchemy.ext.declarative import *
from sqlalchemy.orm import *
from sqlalchemy.databases import mysql
from datetime import datetime
import logging
from operator import itemgetter
from collections import deque
#logging.basicConfig()
#logging.getLogger('sqlalchemy.engine').setLevel(logging.INFO)
#meta = MetaData('sqlite:///database.sqlite3')
f = open("db.txt", "r") # db.txt should contain text like "mysql://realboy@localhost/realboy?charset=utf8&use_unicode=0"
db_path = f.read()
f.close()
db = create_engine(db_path)
meta = MetaData(db)
users = Table('users', meta,
Column("id", Integer, primary_key=True),
Column("username", String(100), unique=True),
Column("password", String(100)),
Column("explored_friends", Boolean, default=False),
Column("exhausted_friends", Boolean, default=False),
Column("explored_tweets", Boolean, default=False),
Column("edge_count", Integer, default=0),
Column("group", Integer, default=-1),
mysql_charset='utf8'
)
meta.create_all()
Upvotes: 3
Views: 7051
Reputation: 434
your MySQL server's socket is likely not at /tmp/mysql.sock so the driver can't connect. Mine is at /var/run/mysqld/mysqld.sock, for example. SQLAlchemy is likely using the mysqclient driver which takes a unix_socket parameter. To take advantage, try using that in the connection URI like so:
mysql://realboy@localhost/realboy?unix_socket=/var/run/mysqld/mysqld.sock
To find out where your servers's socket actually is, try looking inside /etc/mysql/my.cnf [or whatever your server uses for config]
Upvotes: 6