2017-08-10 105 views
0

对于下面的代码,我有地图和包含一些信息,我想通过蟒蛇添加到SQLAlchemy的一个“cookie”的一个例子。正如你可以看到一些像Farmloc,TreasureMap和Crafts等字段都有它们指向的多个条目。我搜索了Enum,除了Enum之外找不到其他东西,但那给了我一些麻烦。有没有比我在这里做的更好的方法。使用Python3.6.1和SQLAlchemy的1.1.11在SQLalchemy中,我可以有一个包含多个字符串的列吗?

import csv, sqlalchemy 
from sqlalchemy import Column, String, Integer, ForeignKey, Numeric, Boolean 
from sqlalchemy.ext.declarative import declarative_base 
import sqlite3 
from enum import Enum, auto 
import enum 
from sqlalchemy import create_engine 

    engine = create_engine('sqlite:///:memory:', echo=True) #TEST DB 

    Base = declarative_base() 

    class Crystal(Base): 
    __tablename__ = 'crystals' 
    dbID = Column(Integer, primary_key=True) 
    ItemName = Column(String, index=True, nullable=False) #Full name, (ie. Earth Shard, Wind Crystal, Fire Cluster) 
    ItemType = Column(String) #Fire, Earth, Wind, Ice, Water ONLY 
    ItemPow = Column(String) #Shard, Crystal, Cluster ONLY 
    Farmloc = Column(String) #Where player can farm 
    Retainer = Column(Boolean) #If retainer can farm 
    RetainerQ = Column(Integer) #Quantity retainer gets 
    Levee = Column(Boolean) #Any Levees rewards these. 
    TreasureMap = Column(String) #False=NO, otherwise Types listed 
    Desynthed = Column(String) #False=NO, otherwise Herb1, Herb2, Ore1, etc 
    Crafts = Column(String) #Crafts associated with (ie Earth w LWR) 
    Price = Column(Integer) #MB price (Should be used as ref for all craftables) 

from sqlalchemy.orm import sessionmaker 
Session = sessionmaker(bind=engine) 
session = Session() 

cc_cookie = Crystal(dbID = 1, 
         ItemName= 'Wind Cluster', 
         ItemType = 'Wind', 
         ItemPow = 'Cluster', 
         Farmloc = 'The Dravanian Hinterlands, Mor Dhona', 
         Retainer = False, 
         RetainerQ = 0, 
         Levee = False, 
         TreasureMap = 'Dragonskin Treasure Map,Gaganaskin Treasure Map,Gazelleskin Treasure Map,Leather Buried Treasure Map', 
         Desynthed = 'Clary Sage,Furymint,Highland Oregano,Windtea Leaves', 
         Crafts = 'CRP,GSM,LWR,WVR', 
         Price = 500)  


Base.metadata.create_all(engine) 

session.add(cc_cookie) 
session.commit() 
+0

你的计划办用sqlite来交易,还是你会长期使用其他数据库? –

+0

我对数据库很陌生。现在我坚持下去,除非你有其他想法。 –

+0

您可以排序在sqlite的阵列列,但它没有原生支持。你可以[店JSON文本列(http://docs.sqlalchemy.org/en/latest/core/custom_types.html#marshal-json-strings)。 [PostgreSQL](http://www.postgresql.org)有真正的数组类型,如果你有一天会跳转。 –

回答

0

检查出内置阵列式 - http://docs.sqlalchemy.org/en/latest/core/type_basics.html#sqlalchemy.types.ARRAY

例如:

TreasureMap = Column(Array(String))

边注:按照惯例全部列名全部小写和下得分分开(例如treasure_map超过TreasureMap

+0

谢谢。我在文档中遇到过这样的情况,但这是我甚至没有跳进它的路线。 “ ”这种类型是所有ARRAY操作的基础,但是,目前只有PostgreSQL后端支持SQLAlchemy中的SQL数组“ PostgreSQL只是一个导入,或者它是一个像SQLalchemy这样的SQL系统? –

+0

PostgreSQL是一个数据库,SQLAlchemy的一个SQL客户端库/ ORM。 –

相关问题