SQLAlchemy를 사용하여 MySQL에서 db를 만드는 방법은 무엇입니까?
SQLAlchemy를 사용하여 MySQL에 DB를 만들어야 합니다. 이미 존재하는 경우 DB에 연결할 수 있지만 존재하지 않는 경우 DB를 만들 수 있기를 원합니다.내 테이블은 다음과 같습니다.
#def __init__(self):
Base = declarative_base()
class utente(Base):
__tablename__="utente"
utente_id=Column(Integer,primary_key=True)
nome_utente=Column(Unicode(20))
ruolo=Column(String(10))
MetaData.create_all()
def __repr(self):
return "utente: {0}, {1}, id: {2}".format(self.ruolo,self.nome_utente,self.utente_id)
class dbmmas(Base):
__tablename__="dbmmas"
db_id=Column(Integer,primary_key=True,autoincrement=True)
nome_db=Column(String(10))
censimento=Column(Integer)
versione=Column(Integer)
ins_data=Column(DateTime)
mod_data=Column(DateTime)
ins_utente=Column(Integer)
mod_utente=Column(Integer)
MetaData.create_all()
def __repr(self):
return "dbmmas: {0}, censimento {1}, versione {2}".format(self.nome_db,self.censimento,self.versione)
class funzione(Base):
__tablename__="funzione"
funzione_id=Column(Integer,primary_key=True,autoincrement=True)
categoria=Column(String(10))
nome=Column(String(20))
def __repr__(self):
return "funzione:{0},categoria:{1},id:{2} ".format(self.nome,self.categoria,self.funzione_id)
class profilo(Base):
__tablename__="rel_utente_funzione"
utente_id=Column(Integer,primary_key=True)
funzione_id=Column(Integer,primary_key=True)
amministratore=Column(Integer)
MetaData.create_all()
def __repr(self):
l=lambda x: "amministratore" if x==1 else "generico"
return "profilo per utente_id:{0}, tipo: {1}, funzione_id: {2}".format(self.utente_id,l(self.amministratore),self.funzione_id)
class aree(Base):
__tablename__="rel_utente_zona"
UTB_id=Column(String(10), primary_key=True) # "in realta' si tratta della seatureSignature della feature sullo shapefile"
utente_id=Column(Integer, primary_key=True)
amministratore=Column(Integer)
MetaData.create_all()
def __repr(self):
l=lambda x: "amministratore" if x==1 else "generico"
return "zona: {0}, pe utente_id:{1}, {2}".format(self.UTB_id,self.utente_id,l(self.amministratore))
class rel_utente_dbmmas(Base):
__tablename__="rel_utente_dbmmas"
utente_id=Column(Integer,primary_key=True)
db_id=Column(Integer,primary_key=True)
amministratore=(Integer)
MetaData.create_all()
def __repr(self):
l=lambda x: "amministratore" if x==1 else "generico"
return "dbregistrato: {0} per l'utente{1} {2}".format(self.db_id,self.utente_id,l(self.amministratore))
작성 방법mysql
서버에 연결하여 데이터베이스를 작성하기만 하면 되는 데이터베이스:
import sqlalchemy
engine = sqlalchemy.create_engine('mysql://user:password@server') # connect to server
engine.execute("CREATE DATABASE dbname") #create db
engine.execute("USE dbname") # select new db
# use the new db
# continue with your work...
물론 사용자는 데이터베이스를 작성할 수 있는 권한이 있어야 합니다.
SQLChemy-Utils를 사용할 수 있습니다.
pip install sqlalchemy-utils
그러면 당신은 다음과 같은 것들을 할 수 있습니다.
from sqlalchemy_utils import create_database, database_exists
url = 'mysql://{0}:{1}@{2}:{3}'.format(user, pass, host, port)
if not database_exists(url):
create_database(url)
저는 여기서 답을 찾았습니다, 저에게 많은 도움이 되었습니다.
표준적인 방법이 무엇인지는 모르겠지만, 데이터베이스 목록을 대조하여 데이터베이스가 있는지 확인하고 데이터베이스가 없는 경우 데이터베이스를 작성하는 방법이 있습니다.
from sqlalchemy import create_engine
# This engine just used to query for list of databases
mysql_engine = create_engine('mysql://{0}:{1}@{2}:{3}'.format(user, pass, host, port))
# Query for existing databases
existing_databases = mysql_engine.execute("SHOW DATABASES;")
# Results are a list of single item tuples, so unpack each tuple
existing_databases = [d[0] for d in existing_databases]
# Create database if not exists
if database not in existing_databases:
mysql_engine.execute("CREATE DATABASE {0}".format(database))
print("Created database {0}".format(database))
# Go ahead and use this engine
db_engine = create_engine('mysql://{0}:{1}@{2}:{3}/{4}'.format(user, pass, host, port, db))
데이터베이스가 작성되었는지 여부를 알 필요가 없는 경우 다른 방법이 있습니다.
from sqlalchemy import create_engine
# This engine just used to query for list of databases
mysql_engine = create_engine('mysql://{0}:{1}@{2}:{3}'.format(user, pass, host, port))
# Query for existing databases
mysql_engine.execute("CREATE DATABASE IF NOT EXISTS {0} ".format(database))
# Go ahead and use this engine
db_engine = create_engine('mysql://{0}:{1}@{2}:{3}/{4}'.format(user, pass, host, port, db))
CREATE DATABASE IF NOT EXISTS dbName;
을 사용하는 것이 좋습니다.with
:
from sqlalchemy import create_engine
username = ''
password = ''
host = 'localhost'
port = 3306
DB_NAME = 'db_name'
engine = create_engine(f"mysql://{username}:{password}@{host}:{port}")
with engine.connect() as conn:
# Do not substitute user-supplied database names here.
conn.execute(f"CREATE DATABASE IF NOT EXISTS {DB_NAME}")
mysql 클라이언트는 PyMySQL보다 벤치마크 테스트에서 최대 10배 더 빠른 것 같습니다. 자세한 내용은 MySQLdb, mysqlclient와 MySQL 커넥터/Python의 차이점을 참조하십시오.
하지만 적어도 매초마다 쿼리 시간이 아니라면 파이썬용 파이썬 준비 패키지를 사용하는 것은 어떨까요?PyMySQL은 다음 링크를 통해 제안됩니다.
Python 패키지:
pip로 설치하고 "requirements.txt"를 입력해야 합니다.
- PyMySQL
- SQL 화학
다시 말하지만, 쿼리 속도가 가장 빠른 경우 mysqlclient 패키지를 사용합니다.그런 다음 추가 Linux 패키지를 설치해야 합니다.sudo apt-get install libmysqlclient-dev
.
import
진술들
하나만 필요:
import sqlalchemy
연결 문자열(= db_url)
{dialect/DB}(으)로 시작하는 연결 문자열API}+{driver}:
db_url =mysql+pymysql://
어디에pymysql
는 드라이버로 사용되는 Python 패키지 "PyMySQL"을 나타냅니다.
다시 말하지만, 쿼리 속도가 가장 빠른 경우 mysqlclient 패키지를 사용합니다.그렇다면 당신은 필요합니다.mysql+msqldb://
현시점에서
원격 연결의 경우 연결 문자열에 추가해야 합니다.
- 주인
- 사용자
- 비밀번호
- 데이터베이스
- port(표준 3306이 아닌 경우에만 포트)
여러 가지 방법으로 db_url을 생성할 수 있습니다.가능한 공격을 방지하기 위해 사용자와 암호 및 다른 변수 값을 문자열에 직접 쓰지 마십시오.
- sqlalchemy.엔진URL.create() 또는 사용
.url.URL
Cloud Functions에서 Cloud SQL로 연결의 예 또는 자동으로 추가하는 예를 참조하십시오.?
: 사미예):?driver=SQL+Server
Building에서 sqlalchemy.engine.url.url.URL을 사용하는 mssql+pyodbc에 대한 연결 URL을 만드는 문자열의 끝에 있습니다. f"""...{my_var}..."""
"""...{my_var}...""".format(my_var=xyz_var)
- ...
SQLAlchemy의 URL 도우미가 없는 예:
db_url = "{dialect}+{driver}://{user}:{password}@{host}:{port}/{database}".format(
또는:
db_url = "{dialect}+{driver}://{user}:{password}@{host}/{database}?host={host}?port={port}".format(
dialect = 'mysql',
driver = 'pymysql',
username=db_user,
password=db_pass,
database=db_name,
host=db_host,
port=db_port
)
기타 엔진 구성
기타 연결 드라이버, 방언 및 방법은 SQL 화학 1.4 설명서 - 엔진 구성을 참조하십시오.
존재하지 않는 경우 DB 생성
SQL 화학을 사용하여 새 데이터베이스를 만드는 방법을 참조하십시오.
engine = sqlalchemy.create_engine(db_url)
if not sqlalchemy.database_exists(engine.url):
create_database(engine.url)
with engine.connect() as conn:
conn.execute("commit")
conn.execute("create database test")
언급URL : https://stackoverflow.com/questions/10770377/how-to-create-db-in-mysql-with-sqlalchemy
'programing' 카테고리의 다른 글
jQuery를 사용하여 너비를 백분율로 설정 (0) | 2023.08.30 |
---|---|
여러 필드를 포함하는 필드 쿼리 (0) | 2023.08.30 |
MariaDB 이달의 첫째 날 찾기 및 UTC로 변환 (0) | 2023.08.30 |
GET 인수가 없는 요청 문자열 (0) | 2023.08.30 |
XDomainRequest 또는 ActiveXObject('Microsoft.XMLHTTP') (0) | 2023.08.30 |